使用cheeriojs进行刮擦遇到问题

时间:2018-03-07 23:51:11

标签: javascript node.js cheerio

我试图从网站上抓取文章链接,并遇到一个问题,其中只有一个链接被抓取而其他元素没有循环。我将nodejs与cheerio和请求包一起使用。

    request('http://www.nj.com/politics', function(error, response, html) {

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

    $('#river-container ul').each(function(i, element) {

        var articleLink = $(element).find('li.river-item.has-photo').find('div.item-text').find('h2.h2.fullheadline').find('a').attr('href');
        results.push({ link: articleLink });
    });

    res.send(results);

});

1 个答案:

答案 0 :(得分:0)

您显示的HTML只有一个与选择器#river-container ul匹配的元素,因此您的.each()只有一次循环迭代。如果您要迭代<li>下方的所有<ul>条目,请将外部循环更改为:

$('#river-container ul li').each(...)

然后修改内部.find()语句,以适应您已与<li>匹配的事实。

或者,将顶部选择器更改为您真正想要的内容:

request('http://www.nj.com/politics', function(error, response, html) {

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

    $('#river-container ul li.river-item.has-photo div.item-text h2.h2.fullheadline a').each(function(i, element) {

        var articleLink = $(element).attr('href');
        results.push({ link: articleLink });
    });

    res.send(results);

});