Как я могу сделать запрос на несколько URL-адресов и проанализировать результаты с каждой страницы? - PullRequest
0 голосов
/ 28 марта 2020

Я использую популярный пакет npm cheerio с запросом на получение некоторых табличных данных.

Хотя я могу легко извлекать и анализировать таблицу с одной страницы, я бы хотел l oop Перезагружать / обрабатывать несколько страниц.

Я попытался обернуть внутри циклы / различные утилиты, предлагаемые пакетом 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

Мой текущий подход, после попытки циклов, заключаться в том, чтобы обернуть это внутри другой функции с параметром обратного вызова. Однако успеха пока нет, и он становится довольно грязным.

Каков наилучший способ передачи массива в эту функцию?

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Предполагая, что вы хотите сделать их по одному:

; (async() => {
  for(let url of urls){
    await getData(url)
  }
})()
1 голос
/ 28 марта 2020

Вы пытались использовать Promise.all (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)?

Для циклов обычно плохая идея при работе с асинхронными вызовами. Это зависит от того, сколько звонков вы хотите сделать, но я считаю, что этого может быть достаточно. Я бы использовал массив обещаний, которые извлекают данные и отображают результаты для анализа.

...