Estoy tratando de obtener todos los enlaces en el div "Notas y referencias" en esta página:
https://fr.wikipedia.org/wiki/Barack_Obama
pero parece que no tengo el selector adecuado. Intenté esto pero no funcionó:
const scrollable_section = '#mw-content-text > div.mw-parser-output > div.reference-cadre' await page.evaluate(selector => { const element = document.querySelector(selector); element.scrollTop = element.offsetHeight; }, scrollable_section);¿Puede alguien ayudarme?
Soy nuevo en Puppeteer, por lo que podría necesitar más explicaciones.
El hecho de que el elemento sea desplazable no significa que realmente necesite desplazarse para obtener los datos. Por lo general, solo para las fuentes dinámicas impulsadas por JS es necesario jugar con el desplazamiento.
En este caso, los datos están disponibles de forma estática, por lo que, a menos que esté usando Puppeteer por alguna otra razón, podría hacerlo con un combo Axios/Cheerio más simple y probablemente más rápido.
Aún mejor es usar la API de Wikipedia en lugar de raspar los datos. Si raspa, respete sus límites para robots.
Continuando con Puppeteer, Wikipedia tiene estructuras de página extrañas que no anidan secciones. Después de seleccionar #Notes_et_références , puede aparecer en el padre <h2> , luego iterar un par de nodos hermanos hacia adelante hasta que esté en el elemento .reference-cadre (codifiqué esta relación, pero podría hacerla más dinámica con un bucle si estar un poco más preparado para el futuro es un objetivo).
const puppeteer = require("puppeteer"); let browser; (async () => { browser = await puppeteer.launch({headless: true}); const [page] = await browser.pages(); const url = "https://fr.wikipedia.org/wiki/Barack_Obama"; await page.goto(url); const links = await page.evaluate(() => [...document.querySelector("#Notes_et_références") .parentNode .nextElementSibling .nextElementSibling .querySelectorAll("a")] .map(e => e.getAttribute("href")) ); console.log(links.length, links.slice(0, 5)); })() .catch(err => console.error(err)) .finally(() => browser?.close()) ;Producción:
809 [ '#cite_ref-prononciation_1-0', '#cite_ref-prononciation_1-1', '/wiki/Prononciation_de_l%27anglais', '/wiki/Anglais_am%C3%A9ricain', '/wiki/Transcription_phon%C3%A9tique' ]