我试图在节点中制作简单的Feed阅读器,并且我在node.js中面临多个请求的问题。例如, 我得到了这段代码:
var url = [
"https://site1.com",
"https://site2.com"
];
var items = [];
var i;
for(i=0; i<url.length; i++){
request(url[i], function(err, respone, html){
if(!err) {
var $ = cheerio.load(html);
if(i == 0){
$(".class1").find("a").each(function (index, element){
items.push($(element).text());
});
}else if(i == 1){
$(".class1").find("a").each(function (index, element){
items.push($(element).text());
});
}
}
});
}
如何在抓取循环中抓取多个站点?
答案 0 :(得分:0)
在这种情况下,您可以将Promise与Promise.all一起使用,因为网络请求可以是异步的。
var urls = [
"https://site1.com",
"https://site2.com"
];
var promises = [];
for(var url of urls) {
promises.push(new Promise((resolve, reject)=>{
request(url, function(err, respone, html){
if(err) {
return reject(err);
}
var $ = cheerio.load(html);
var items = [];
$(".class1").find("a").each(function (index, element){
items.push($(element).text());
});
return resolve(items);
});
})
}
Promise.all(promises).then((results)=>{
console.log(results);
}).catch((error)=>{
console.log(error);
});