开发者社区> 问答> 正文

用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 3046 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
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载