需要有关cheerio eq()变量的建议

时间:2016-01-19 19:52:15

标签: node.js request cheerio

所以我有这个node.js脚本,它抓取了网页的某些部分:

var cheerio = require('cheerio');
var request = require('request');
var x = 1;
request({
    method: 'GET',
    url: 'https://balticnews.net/'
}, function(err, response, body) {
    if (err) return console.error(err);
    $ = cheerio.load(body);
    $('#table, td').eq(x).each(function() {
    console.log($(this).text());
    });
});

但我需要x会改变。我试图制作一个for循环,但没有改变。我需要的是,当我运行这个程序时,它会显示x = 1然后1 + 5之后的6 + 5等等,并且难以解释:D Ofcourse我可以复制并粘贴这么多次并选择我需要的数字:

$('#table, td').eq(x).each(function() {
    console.log($(this).text());
});

但我想学习如何更快地完成它

2 个答案:

答案 0 :(得分:1)

所以我理解你只想要索引:1,6,11 ..可能解决方案可能是:

//Not tested
$('#table, td').each(function(index,element) {
     if(index%5==1){
        element.each(function(){
           console.log($(this).text());
       })

     }
});

答案 1 :(得分:0)

在更复杂的情况下,如何使用更通用的解决方案呢? (我使用XML,但相同的注释将适用于HTML输入)

matchSeatIndex = $("mySeatList")
                .not(':has(SEAT > LIST_CHARACTERISTIC:contains("1"))')
                .has("SEAT > LIST_CHARACTERISTIC:contains('1W')")
                .has("SEAT > STATUS:contains('AVAILABLE')")
                .find('INDEX').first().text();

这里的问题是,第一个过滤器(在特性中包含“ 1”)也会过滤掉“ 1W”。


在这种情况下,将其分为两部分是很痛苦的

matchSeatIndex = $("mySeatList")
                .has("SEAT > LIST_CHARACTERISTIC:contains('1W')")
                .has("SEAT > STATUS:contains('AVAILABLE')")
                .find('INDEX').first().text();

//Then a second part to check with a function if the characteristic '1' is well present

不确定为什么cheerio尚未在其中实现:eq()...听起来很基础。 做这项工作有什么技巧吗?