因此,我有这个简单的代码来挖掘一些视频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 :当前代码返回一个空数组;
发布于 2014-04-30 16:30:42
你有两个问题。其中之一是您要返回urls,但它从未设置为任何东西。您正在将值推送到videoUrls上,但正在返回空的urls数组。另一个是request是一个异步函数。您将需要设置一个回调,以设置视频urls,一旦它带回刮回来的数据。
所以:
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);
}这应该是可行的,而且是一种基本的方法。当然,您可以在函数中封装任何您想要的内容,以使其更可重用,但我希望这能回答您的问题。
https://stackoverflow.com/questions/23393156
复制相似问题