我如何请求多个URL并解析每个页面的结果?

问题描述 投票:0回答:2

我正在使用流行的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
2个回答
0
投票

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

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


0
投票

假设您想一次做一个:

; (async() => {
  for(let url of urls){
    await getData(url)
  }
})()
© www.soinside.com 2019 - 2024. All rights reserved.