1

我正在尝试从该站点抓取表格中的各种元素,以自学使用 node.js、cheerio 和 request 进行抓取

我在获取表格中的项目时遇到了麻烦,本质上我想从表格中获取“排名”、“公司”和“3 年增长”。我该怎么做呢?

根据在线教程,我开发了我的 scraping.js 脚本,如下所示:

    var request = require ('request'),
        cheerio = require ('cheerio');     
    request('http://www.inc.com/inc5000/index.html', function (error, response, html) {
      if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html);
        $('tr.ng-scope').each(function(i, element){ //problem probably lies here
          var a = $(this).get(0);
          console.log(a);
        });
      }
    });

但是,我确信我没有得到正确的评论。有没有办法更好地访问表中的属性?

我注意到 Xpath 就是这样

//*[@id="col-r"]/table/tbody/tr 2 /td 1 -- 排名

//*[@id="col-r"]/table/tbody/tr 2 /td 2 /a -- 公司名称

//*[@id="col-r"]/table/tbody/tr 2 /td[3] -- 3年增长率

只是想弄清楚如何相应地访问这些属性..

4

1 回答 1

2

你在正确的轨道上。

$().get()方法返回元素。在你的情况下var aTR. 这不一定是你想要的。

您需要做的是将每一行进一步细分为个人TD的。我使用$(this).find('td'). 然后,我逐个抓取每个TD文本并从中提取文本,将其转换为一个对象,其中键代表表的字段。所有这些都聚合到一个数组中,但是您可以使用基本概念来构建您认为适合使用的任何数据结构。

    request('http://www.inc.com/inc5000/index.html', function (error, response, html) {
        if(error || response.statusCode != 200) return;

        var $ = cheerio.load(html);
        var DATA = [];

        $('tr.ng-scope').each(function(){
            var $tds = $(this).find('td');

            DATA.push({
                rank:     $tds.eq(0).text(),
                company:  $tds.eq(1).text(),
                growth:   $tds.eq(2).text(),
                revenue:  $tds.eq(3).text(),
                industry: $tds.eq(4).text()
            });
        });

        console.log(DATA);
    });
于 2014-09-04T06:14:07.193 回答