美文网首页
node-crawler 异步 Promise 和 Promis

node-crawler 异步 Promise 和 Promis

作者: webmrxu | 来源:发表于2019-06-03 11:56 被阅读0次

    node-crawler 异步 Promise 和 Promise.all 实现

    node-crawler官方文档

    在使用 node-crawler 进行爬虫都是异步的,但项目中往往需要爬虫多个链接,这样异步就不好处理了。

    在官方文档中,爬虫多个链接可以传递数组参数,但在文档并没有提供类似Promise.all API, 导致多个爬虫请求异步不好处理, 不能判断所有爬虫请求是否全部完成。

    在官网文档中,Promise support 还在 "Rough todolist", 所以打算自己简单实现一个Promise 和 Promise.all, 有需要的可以参考。

    var Crawler = require("crawler");
    const c = new Crawler({
      maxConnections : 10
    });
    
    // 所有爬虫链接
    const urls = ['https://cn.bing.com/', 'https://cn.bing.com/'];
    
    let promiseList = [];
    urls.forEach(v => {
      promiseList.push(spiderItem(v));
    })
    
    // 使用Promise.all
    Promise.all(promiseList).then(ress => {
      // 所有爬虫链接爬虫完成时调用
      console.log(ress)
    })
    
    function spiderItem(url) {
      return new Promise((resolve, reject) => {
        c.queue([{
          uri: url,
          jQuery: true,
          callback: function (error, res, done) {
            if (error) {
              reject(error);
            } else {
              resolve(res)
            }
            done();
          }
        }]);
      })
    }
    

    相关文章

      网友评论

          本文标题:node-crawler 异步 Promise 和 Promis

          本文链接:https://www.haomeiwen.com/subject/dzfcxctx.html