web-scraping - script - web scraping tutorial
Arrastrando mĂșltiples URL en un bucle usando titiritero (1)
map
, forEach
, reduce
, etc., no espera la operación asincrónica dentro de ellos, antes de que procedan al siguiente elemento del iterador sobre el que se están iterando.
Hay varias formas de pasar por cada elemento de un iterador de forma sincrónica mientras se realiza una operación asincrónica, pero lo más fácil en este caso, creo que sería simplemente usar un operador normal for
, que espera a que la operación termine.
const urls = [...]
for (let i = 0; i < urls.length; i++) {
const url = urls[i];
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: ''networkidle'' });
}
Esto visitaría una url tras otra, como está esperando. Si tiene curiosidad acerca de iterar en serie usando await / async, puede echar un vistazo a esta respuesta: https://stackoverflow.com/a/24586168/791691
yo tengo
urls = [''url'',''url'',''url''...]
esto es lo que estoy haciendo
urls.map(async (url)=>{
await page.goto(`${url}`);
await page.waitForNavigation({ waitUntil: ''networkidle'' });
})
Esto parece no esperar la carga de la página y visitar todas las URL con bastante rapidez (incluso intenté usar page.waitFor)
Solo quería saber si estoy haciendo algo fundamentalmente incorrecto o si este tipo de funcionalidad no es recomendada / apoyada