【问题标题】:How can I make a request to multiple URLs and parse the results from each page?如何向多个 URL 发出请求并解析每个页面的结果?
【发布时间】:2020-03-28 20:22:16
【问题描述】:

我正在使用流行的 npm 包 Cheerio 来请求检索一些表数据。

虽然我可以轻松地从单个页面检索和解析表格,但我想循环/处理多个页面。

我已尝试将 async 包提供的循环/各种实用程序封装在内部,但无法弄清楚这一点。在大多数情况下,节点内存不足。

当前代码:

const cheerio = require('cheerio');
const axios = require("axios");


var url = someUrl;

const getData = async url => {
  try {
    const response = await axios.get(url);
    const data = response.data;
    const $ = cheerio.load(data);
    const announcement = $(`#someId`).each(function(i, elm) {
      console.log($(this).text()) 
    })
  } catch (error) {
    console.log(error);
  }
};


getData(url); //<--- Would like to give an array here to fetch from multiple urls /  pages

在尝试循环之后,我目前的方法是将其包装在另一个带有回调参数的函数中。然而,还没有成功,而且变得相当混乱。

向此函数提供数组的最佳方法是什么?

【问题讨论】:

    标签: javascript node.js axios cheerio


    【解决方案1】:

    假设你想一次做一个:

    ; (async() => {
      for(let url of urls){
        await getData(url)
      }
    })()
    

    【讨论】:

    • 非常感谢@pguardiario - 优雅简单,正是我所需要的。
    【解决方案2】:

    您是否尝试过使用Promise.all (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)?

    在处理异步调用时,For 循环通常不是一个好主意。这取决于您要拨打多少电话,但我相信这已经足够了。我会使用一组 promise 来获取数据并映射结果来进行解析。

    【讨论】:

    • 谢谢@hinosxz 很高兴重新审阅此文档并尝试多角度尝试?
    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多