首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用异步函数返回的数据的正确方法(web抓取示例)

使用异步函数返回的数据的正确方法(web抓取示例)
EN

Stack Overflow用户
提问于 2014-04-30 16:15:13
回答 1查看 51关注 0票数 0

因此,我有这个简单的代码来挖掘一些视频url,以便在之后应用另一个抓取功能。我的问题是我似乎无法返回充满url的数组。我知道这是一个范围问题,但我对Javascript不太熟悉,我的知识使我得到了尽可能多的帮助。

以下是代码:

代码语言: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 :当前代码返回一个空数组;

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-30 16:30:42

你有两个问题。其中之一是您要返回urls,但它从未设置为任何东西。您正在将值推送到videoUrls上,但正在返回空的urls数组。另一个是request是一个异步函数。您将需要设置一个回调,以设置视频urls,一旦它带回刮回来的数据。

所以:

代码语言:javascript
运行
复制
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);  
}

这应该是可行的,而且是一种基本的方法。当然,您可以在函数中封装任何您想要的内容,以使其更可重用,但我希望这能回答您的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23393156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档