Iterate through an html table using Cheerio Iterate through an html table using Cheerio json json

Iterate through an html table using Cheerio


I simplified your parsing code a bit. It works fine on my machine. The problem with your code was that while you were pushing all the values into arrays, you weren't using those values to build up your desired objects. My parsing strategy: grab all the data in three separate arrays just like you did, and then iterate over these arrays to generate the desired object structure.

I tested it locally over the first two countries in your countries object and it was successful.

Here's the code I changed in your for(country in countries) loop:

var years = [];var vaccines = [];var coverages = [];// get years$('.ts .year').each(function() {    years.push($(this).text().trim());});// get vaccines$('.ts .odd td a, .ts .even td a').each(function() {    vaccines.push($(this).text().trim());});// get coverages$('.ts .odd .statistics_small, .ts .even .statistics_small').each(function() {    coverages.push($(this).text().trim());});const numYears = years.length;const numVaccines = vaccines.length;for (var vaccineIdx=0; vaccineIdx<numVaccines; vaccineIdx++) {  // iterate over each vaccine  for (var yearIdx=0; yearIdx<numYears; yearIdx++) {    //iterate over each year for vaccine    let obj = {      vaccine: vaccines[vaccineIdx],      country: country,      year: years[yearIdx],      coverage: coverages[vaccineIdx*numYears+yearIdx]    }    jsons.push(obj);  } }// write jsons on file output.jsonfs.writeFile('output.json', JSON.stringify(jsons, null, 3), function(error) {    if (!error) { console.log('File output.json successfully written with',country,'data!'); }    else {      console.log(error, 'occurred while trying to write',country,'data to output.json');    }});

Resulting object for first and last (BCG and TT2+ vaccines) for Albania (intermediate values in array omitted because of StackOverflow limitations):

[   {      "vaccine": "BCG",      "country": "Albania",      "year": "2016",      "coverage": "99"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2015",      "coverage": "100"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2014",      "coverage": "100"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2013",      "coverage": "100"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2012",      "coverage": "96"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2011",      "coverage": "97"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2010",      "coverage": "100"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2009",      "coverage": "97"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2008",      "coverage": "100"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2007",      "coverage": "98"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2006",      "coverage": "97"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2005",      "coverage": "98"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2004",      "coverage": "97"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2003",      "coverage": "95"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2002",      "coverage": "94"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2001",      "coverage": "93"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "2000",      "coverage": "93"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1999",      "coverage": "93"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1998",      "coverage": "87"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1997",      "coverage": "94"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1996",      "coverage": "94"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1995",      "coverage": "97"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1994",      "coverage": "87"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1993",      "coverage": "82"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1992",      "coverage": "81"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1991",      "coverage": "80"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1990",      "coverage": "94"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1989",      "coverage": "94"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1988",      "coverage": "92"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1987",      "coverage": "92"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1986",      "coverage": "92"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1985",      "coverage": "92"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1984",      "coverage": "90"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1983",      "coverage": "90"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1982",      "coverage": "_"   },   {      "vaccine": "BCG",      "country": "Albania",      "year": "1981",      "coverage": "93"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2016",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2015",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2014",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2013",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2012",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2011",      "coverage": "75"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2010",      "coverage": "85"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2009",      "coverage": "80"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2008",      "coverage": "83"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2007",      "coverage": "86"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2006",      "coverage": "86"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2005",      "coverage": "86"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2004",      "coverage": "85"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2003",      "coverage": "73"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2002",      "coverage": "71"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2001",      "coverage": "80"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "2000",      "coverage": "89"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1999",      "coverage": "77"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1998",      "coverage": "65"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1997",      "coverage": "99"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1996",      "coverage": "98"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1995",      "coverage": "97"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1994",      "coverage": "100"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1993",      "coverage": "96"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1992",      "coverage": "94"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1991",      "coverage": "78"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1990",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1989",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1988",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1987",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1986",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1985",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1984",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1983",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1982",      "coverage": "_"   },   {      "vaccine": "TT2+",      "country": "Albania",      "year": "1981",      "coverage": "_"   }]

This parsing code is a little bit fragile: if the site you are scraping from changes its class values or has differing structure on different country's pages, the data could be invalid. Depending on the scope and intent of your project, this may or may not be a concern. Just something to consider.