Problema
Recolectar datos de páginas web de forma manual es inviable a escala. Las páginas dinámicas con JavaScript requieren un navegador real que ejecute el código antes de que el contenido sea accesible — las peticiones HTTP simples solo ven HTML vacío.
Solución
Scraper en dos niveles: BeautifulSoup para páginas estáticas (HTML ya renderizado) y Selenium para páginas dinámicas que carga el DOM completo antes de extraer. Manejo de paginación, rate limiting responsable y almacenamiento estructurado en CSV/JSON.
BeautifulSoup — páginas estáticas
- requests para obtener el HTML y BeautifulSoup para parsearlo con selectores CSS y XPath
- Extracción de texto, atributos href/src e imágenes
- Paginación: detección del botón 'siguiente' y extracción en bucle
- Manejo de errores HTTP: retry con backoff exponencial
Selenium — páginas dinámicas
- WebDriver en modo headless: Chrome/Firefox sin interfaz gráfica
- Esperas explícitas (WebDriverWait + expected_conditions) en lugar de sleep fijos
- Scroll infinito: ejecución de JavaScript para cargar más contenido
- Rate limiting: sleep aleatorio entre peticiones para evitar bloqueos
- Exportación: pandas DataFrame → CSV con encoding UTF-8 y tipos correctos