jQuery访问站点中的DOM

jQuery to access DOM in a site

本文关键字:DOM 站点 访问 jQuery      更新时间:2023-09-26

我正试图从这个网站上抓取表中的各种元素,以自学使用node.js、cheerio和request 进行抓取

我很难在表中列出项目,基本上我想从表中获得"排名"、"公司"answers"3年增长"。我该怎么做?

基于一个在线教程,我开发了我的scratch.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/tr2/td1——排列

//*[@id="col-r"]/table/tbody/tr2/td2/a——公司名称

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

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

你走在了正确的轨道上。

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

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

    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);
    });