所以我有这个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());
});
但我想学习如何更快地完成它
答案 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()...听起来很基础。 做这项工作有什么技巧吗?