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

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();
      }
    }]);
  })
}

猜你喜欢

转载自blog.csdn.net/weixin_34248118/article/details/90907986