Javascript 使用异步函数返回的数据的正确方法(web抓取示例)
因此,我有这个简单的代码来挖掘一些视频url,以便在之后对其应用另一个刮取功能。我的问题是,我似乎无法返回url填充的数组。我知道这是一个范围问题,但我对Javascript不太熟悉,我的知识让我尽了最大的努力 代码如下:Javascript 使用异步函数返回的数据的正确方法(web抓取示例),javascript,callback,scope,closures,Javascript,Callback,Scope,Closures,因此,我有这个简单的代码来挖掘一些视频url,以便在之后对其应用另一个刮取功能。我的问题是,我似乎无法返回url填充的数组。我知道这是一个范围问题,但我对Javascript不太熟悉,我的知识让我尽了最大的努力 代码如下: var request = require('request'); var cheerio = require('cheerio'); var startUrl = 'http://www.somewebsite.com/mostviewed'; var getVideo
var request = require('request');
var cheerio = require('cheerio');
var startUrl = 'http://www.somewebsite.com/mostviewed';
var getVideoIds = function(url) {
var urls = [];
request(url, function(err, resp, body){
if (err)
throw err;
$ = cheerio.load(body);
var videoUrls = [];
$('.videoTitle a').each(function() {
videoUrls.push($(this).attr('href'));
});
});
return urls;
}
var urlsToScrap = getVideoIds(startUrl);
console.log(urlsToScrap);
PS:当前代码返回一个空数组 您有两个问题。一是返回
url
,但它从未设置为任何内容。您正在将值推送到videourl
上,但返回的是空的url
数组。另一个是request
是一个异步函数。您需要设置一个回调来设置视频URL,一旦它将抓取的数据带回来
因此:
这应该是可行的,而且是一种基本的方法。当然,您可以将这些内容包装到函数中,使其更易于重用,但我希望这能回答您的问题。让我来看看!是的,确实如此,我正要发布几乎相同的答案!非常感谢。
var urls = [];
request(url, function(err, resp, body){
if (err)
throw err;
$ = cheerio.load(body);
$('.videoTitle a').each(function() {
urls.push($(this).attr('href'));
});
onVideosScraped();
});
function onVideosScraped() {
console.log(urls);
}