Javascript Node Js& Cheerio web scraper用数据创建对象

时间:2017-04-27 12:56:10

标签: javascript json node.js request cheerio

我正在使用cheerio构建一个简单的Web scraper,这是我的代码:

var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app     = express();

app.get('/', function(req, res){

url = 'http://www.gazzetta.it/calcio/fantanews/voti/serie-a-2016-17/giornata-32';

request(url, function(error, response, html){
  if(!error){

  var $ = cheerio.load(html);
  var json = {

    teamsList : {}

  };

  $('.listView .magicTeamList').each(function(){

      var teamName = $(this).find('.teamNameIn').text();
      var playerName = $(this).find('.playerNameIn').text();
      var playerGrade = $(this).find('.fvParameter').not('.head').text();

      json.teamsList[teamName] = {};
      json.teamsList[teamName][playerName] = playerGrade;

  })

  } else {

    console.log('error happened :' + error);

  }

  fs.writeFile('output.json', JSON.stringify(json, null, 4), function(err){

    console.log('File successfully written! - Check your project directory for the output.json file');

  })

// Finally, we'll just send out a message to the browser reminding you that this app does not have a UI.
  res.send('Check your console!')

  });
})

app.listen(8081);
console.log('Magic happens on port 8081');
exports = module.exports = app;

我想在json对象中推送数据但是我没有达到预期的效果,我得到的output.json就是这个(我只是粘贴结果的摘录):

{
"teamsList": {
    "atalanta": {
        "Gollini P.Masiello A.Conti A.Hateboer H.Caldara M.Toloi R.Kurtic J.Cristante B.Freuler R.Kessie F.Petagna A.Dalessandro M.Cabezas B.Paloschi A.": "4.56.57.55.5779667666-"
    },
    "bologna": {
        "Mirante A.Torosidis V.Maietta D.Masina A.Gastaldello D.Pulgar E.Taider S.Dzemaili B.Verdi S.Di Francesco F.Petkovic B.Krafth E.Krejci L.Sadiq U.": "5.5665.5636.565.556--5.5"
    }
  }
}

但我想要的是这样的输出:

{
"teamsList": {
    "atalanta": {
        "Gollini P." : 4.5,
        "Masiello A." : 6.5,
        ...
    }
  }
}

我已经找到了答案,但我找不到任何针对我的具体问题,或者我只是错过了一些非常愚蠢的东西..顺便说一下,任何帮助都会受到赞赏,那些人

1 个答案:

答案 0 :(得分:0)

在每个循环上都有这个

json.teamsList[teamName] = {};

这将从团队对象中删除任何现有的玩家。您需要使用IF语句来检查它是否已经存在。