Introducción al raspado web dinámico
El raspado web consiste en extraer datos de sitios web, lo que puede resultar especialmente difícil con contenidos dinámicos que cambian con frecuencia. Nuestros expertos, Greg, Dario y Diego, brindaron consejos prácticos para superar estos desafíos con herramientas como Puppeteer, Selenium y Playwright.
Greg: residente en San Francisco, Greg trabaja en Andela y está especializado en ingeniería de software tradicional y raspado web.
Darío: de Argentina, Darío trabaja con Mabel y se centra en herramientas de automatización de control de calidad con poco código y contribuye a la versión .NET de PuppeteerSharp y Playwright.
Diego: Diego viene de Valencia (España) y es uno de los líderes del proyecto Selenium y líder de código abierto en Sauce Labs, una plataforma de pruebas en la nube.
Puntos clave de debate
1. Mantenerse al día con los cambios de HTML
Greg hizo hincapié en la importancia de elegir selectores confiables. Evitar largas cadenas de selectores codificados como div > div > p
. En su lugar, usa selectores más estables como aria-label
o selectores basados en texto. Aún mejor, intercepta las solicitudes de API siempre que sea posible, ya que es menos probable que cambien que el DOM.
Herramientas y técnicas:
- Legibilidad de Mozilla: convierte HTML complejo en un formato limpio y legible.
- Intercepción de API: acceder directamente a los puntos finales de datos para evitar los cambios en el DOM.
2. Navegar por el enrutamiento del lado del cliente y las aplicaciones de una sola página (SPA)
Darío habló sobre la gestión de los SPA, que suelen utilizar el enrutamiento del lado del cliente, lo que dificulta la extracción de datos. Puntos clave incluidos:
- Evitar confiar en las cargas iniciales: utilizar varias comprobaciones para confirmar que la página está completamente cargada.
- Comprobar el contexto: asegurarse de estar en el paso correcto de los procesos de varios pasos verificando los títulos u otros elementos estables.
- Tools: utilizar eficazmente las funciones de navegación y espera de Playwright o Puppeteer.
3. Acceso a datos cargados de forma asincrónica
Diego recomendó usar marcos que gestionen la sincronización automáticamente, como Selenide para Java o WebDriverIO para JavaScript. Estos marcos simplifican la espera de que los elementos se carguen al proporcionar métodos integrados.
Consejos:
- Predicados basados en eventos: utilizar
waitForFunction
para esperar estados específicos en el DOM. - Intercepción de solicitudes: capturar y trabajar con las respuestas de la API directamente cuando sea posible.
4. Imitar las interacciones de los usuarios para la carga diferida
Greg proporcionó técnicas para hacer frente a la carga diferida, en la que el contenido se carga a medida que interactúas con la página. Las estrategias clave incluyeron:
- Interacciones con el teclado: utilizar las teclas de paso de página para activar la carga.
- Capturar datos de forma incremental: guardar los datos en fragmentos para evitar que se pierdan si se produce un error en un script.
- Evitar las interacciones de los usuarios cuando sea posible: interceptar directamente las respuestas de la API para evitar la necesidad de que los usuarios realicen acciones.
5. Extracción de información de los componentes de Shadow DOM
Darío explicó cómo manejar Shadow DOM, que encapsula partes de la página web y dificulta su extracción. Puntos clave incluidos:
- Entender Open vs. Shadow DOM cerrado: la mayoría de las herramientas pueden perforar el Shadow DOM abierto, pero no el cerrado.
- Manejo manual de JavaScript: utilizar la propiedad
ShadowRoot
para acceder manualmente a los elementos de Shadow DOM. - Compatibilidad con marcos: herramientas como Playwright y Puppeteer gestionan Shadow DOM de forma eficaz.
6. Capturar capturas de pantalla de página completa
Diego recomendó usar Firefox para las capturas de pantalla de página completa, ya que tiene un comando nativo para este propósito. La integración de Selenium con el protocolo DevTools de Chrome es otro método eficaz.
Consejos:
- Red inactiva: asegurarse de que todos los elementos estén cargados antes de realizar capturas de pantalla.
- Usar métodos integrados: herramientas como la opción
fullPage
de Puppeteer simplifican el proceso.
7. Operaciones a gran escala
Jacob habló sobre los desafíos de escalar las operaciones de raspado web, como la administración de huellas dactilares, la gestión de sesiones y la rotación de IP. Presentó el navegador de raspado de Bright Data, que abstrae estas complejidades y permite a los desarrolladores centrarse en la creación de scripts.
Características principales:
- Administración de sesiones: gestionar automáticamente las sesiones para evitar ser detectadas.
- Rotación de IP: utilizar una variedad de direcciones IP para simular diferentes usuarios.
- Playground for Testing: prueba tus scripts en un entorno controlado antes de ampliarlos.
Sesión interactiva de preguntas y respuestas
El seminario web concluyó con una sesión de preguntas y respuestas en la que los participantes preguntaron sobre varios aspectos del raspado web. Los temas clave incluyeron:
- Interceptación de llamadas a la API de frontend: utilizar DevTools del navegador para identificar y replicar las solicitudes de API.
- Selectores robustos: evitar usar XPath; en su lugar, utilizar selectores más estables y confiables.
- Gestión de la autenticación: almacenar en caché los tókenes de autenticación y gestionar la autenticación de dos factores manualmente cuando sea necesario.
Conclusión
Este seminario web proporcionó una gran cantidad de conocimientos para los desarrolladores que buscan dominar el raspado web dinámico. Al aprovechar los conocimientos compartidos por Greg, Darío y Diego, puedes mejorar sus técnicas de raspado y hacer que tus scripts sean más sólidos y eficientes. Para aquellos que se perdieron la sesión en vivo, la grabación estará disponible pronto. Permanece atento a más contenidos educativos de Bright Data, que te ayudarán a destacar en el raspado web y la extracción de datos.
¡Feliz raspado!