Created
October 5, 2021 02:02
-
-
Save wandersonsousa/ecc4cb63f45a8f4c65b3425edfe6ae1a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { chunk } from 'lodash' | |
import Crowler from '.Crowler' | |
import puppeteer from 'puppeteer' | |
const browser = puppeteer.launch() | |
const page = await (await this._browser.pages())[0]) | |
// Lista contendo links para as páginas dos produtos | |
const urls = ['https://produto1.com','https://produto2.com', | |
'https://produto3.com', 'https://produto4.com', | |
'https://produto5.com', 'https://produto6.com'] | |
const chunkedUrls = chunk(urls, 5) | |
/* | |
chunkedUrls = [ ['https://produto1.com','https://produto2.com', 'https://produto3.com', 'https://produto4.com', 'https://produto5.com'], 'https://produto6.com'] | |
*/ | |
// Váriavel onde será salvo o resultado de cada página | |
const DATA = [] | |
for await (const urlsChunk of chunkedUrls) { | |
// Usamos o map para transformar cada url de produto em uma promise que vai retornar os dados do crowler aplicados na mesma | |
const urlsToPromises = urls.map(url => new Promise( | |
// Cria uma nova página para cada url, e finaliza a página ao final de cada execução | |
const newPage = await browserCrowlerManager.newPage() | |
(resolve) => { | |
Crowler(url, newPage) | |
.then( crowlerResponse => resolve(crowlerResponse) ) | |
.catch(err => reject(err)) | |
.finally(()=> newPage.close()) | |
} | |
)) | |
// Executamos todas as promises deste conjuto de urls, que contém 5 promises | |
const promisesResponses = await Promise.allSettled(crowlPools); | |
//Buscamos os dados de cada resposta e salvamos na váriavel "DATA" | |
const responseDataList = await promisesResponses.filter(responsePromise => responsePromise.status === "fulfilled").map((response: any) => response.value); | |
DATA.push(...responseDataList) | |
} | |
// Enfim, retorna os dados dos produtos | |
console.log(DATA) | |
// FIM |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment