所以我有这个简单的代码来挖掘一些视频url,以便在之后对其应用另一个抓取功能。我的问题是,我似乎无法返回url填充的数组。我知道这是一个范围问题,但我对Javascript不太熟悉,我的知识让我尽可能地了解。
这是代码:
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:当前代码返回一个空数组;
您有两个问题。一种是,您将返回urls
,但它从未设置为任何值。您将值推送到videoUrls
上,但返回的是空的urls
数组。另一个是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);
}
这应该有效,而且是一种基本的方法。当然,你可以将任何你想要的东西包装在函数中,使其更可重用,但我希望这能回答你的问题。