Node.js 返回使用nodejs抓取网页的URL
我正在尝试使用nodejs及其两个模块request和cheerio构建一个简单的web应用程序 我通过以下代码实现了这一点:Node.js 返回使用nodejs抓取网页的URL,node.js,scope,request,web-scraping,cheerio,Node.js,Scope,Request,Web Scraping,Cheerio,我正在尝试使用nodejs及其两个模块request和cheerio构建一个简单的web应用程序 我通过以下代码实现了这一点: var printURL=function(url){ request(url, (function() { return function(err, resp, body) { if (err) throw err; $ = cheerio.load(bod
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
$('img').each(function(){
console.log($(this).attr('src'));
});
}
} )());
};
在网站上打印图片的URL效果很好,但我真正想做的是创建一个URL列表,我可以在功能之外使用它。我试过这样做,但它返回一个空列表:
var urlList=[];
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
$('img').each(function(){
urlList.push($(this).attr('src'));
});
}
} )());
};
我怎样才能解决这个问题?非常感谢您需要等待所有回调完成
var urlList=[];
var printURL=function(url){
request(url, (function() {
return function(err, resp, body) {
if (err)
throw err;
$ = cheerio.load(body);
var images = $('img');
var counter = images.length;
images.each(function(){
urlList.push($(this).attr('src'));
counter--;
if (counter==0) {
// now we have all images!!
console.log(urlList);
}
});
}
})());
};
这是node.js异步特性的一部分。如果事情变得更复杂,我建议您使用流控制库,如。代码运行良好,非常感谢!然而,我不确定我是如何理解它的工作原理的。你能把逻辑引导得更进一步一点吗?多谢了,代码并没有按照您写下的顺序执行。异步函数在节点完成它必须完成的任务时调用。您可以在此处找到一些有用的链接: