用nodejs的request模块爬多个网页的问题?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

用nodejs的request模块爬多个网页的问题?

我现在有很多网页要爬,这些地址我已经爬下来放在一个数组里,然后我想用for循环抓取这些网页,代码如下:

db_operation.db_getUrl('appsCategories_China', function(results){

        for(var i = 0; i < results.length; i++)
        {
            var item = results[i];
            // console.log(item);
            request(item.url, function(err, res, content){
                if(!err && res.statusCode == 200)
                {

$$ = cheerio.load(content); getAppsIndex('#selectedcontent', 'a', function(index){ console.log(i); index.push(item.category); console.log(item.category); // db_operation.db_addIndex('appsIndex_China', index) }); } }); } } 结果最后两个控制台输出都是数组results的最后一个元素,应该是因为request的异步执行,导致for循环完了,request还没返回。想请问下我是不是不应该用for循环?求指导!

展开
收起
我的中国 2016-02-08 19:46:58 2747 0
1 条回答
写回答
取消 提交回答
  • 我的中国
    R&amp;S网络资深工程师 ,阿里云论坛官方版主,阿里云云计算ACP,春考教学网站长,IT技术晋级之路专辑作者

    用循环可以的,坐下修改~~
    使用闭包来封装变量

    db_operation.db_getUrl('appsCategories_China', function(results){

    for(var i = 0; i < results.length; i++)
    {
        var item = results[i];
        (function(i,item ){
             request(item.url, function(err, res, content){
                if(!err && res.statusCode == 200)
                {

    $$ = cheerio.load(content); getAppsIndex('#selectedcontent', 'a', function(index){ console.log(i); index.push(item.category); console.log(item.category); // db_operation.db_addIndex('appsIndex_China', index) }); } }); }(i,item )); } }

    2019-07-17 18:28:21
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
Python第五讲——关于爬虫如何做js逆向的思路
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载