Cheerio和请求承诺 - 使用Promise.all抓取多个链接

时间:2018-01-28 01:10:32

标签: javascript node.js web-scraping promise cheerio

我正在使用Cheeriorequest-promise构建一个刮刀,我在跟踪链接时遇到问题:

import rp from 'request-promise';
import cheerio from 'cheerio';

const links = [];
rp(options)
    .then(($) => {
      // Getting the hrefs:
      $('tbody tr').each(function (i, element) {
        const link = $(this).find('.record-data a').attr('href');
        links.push(link);
      });
      // Mapping the urls to the request-promises:
      const promises = links.map(link =>
        rp({ uri: link, transform: body => cheerio.load(body) }),
      );
      // Resolving the promises:
      return Promise.all(promises);
    })
    .then((resolved) => {
      // I have 50 links in total. The `resolved` is an array with 50 nulls
    })
    .catch((error) => {
      console.error('Error:', error);
    });

在第二个then中,我得到一个包含50个空值而不是50个cheerio对象的数组。我做错了什么?

0 个答案:

没有答案