¿Qué es el Web Scraping?
Web scraping es la extracción automática de datos de páginas web usando código. En lugar de copiar información manualmente, un script visita la página, lee el HTML y extrae exactamente lo que necesitas: precios, títulos, enlaces, tablas, imágenes, etc.
- Casos de uso reales: monitorear precios, recopilar noticias, construir datasets para IA, investigación académica, automatizar reportes.
- Ética y legalidad: antes de hacer scraping, revisa el archivo
robots.txtdel sitio (ej. ejemplo.com/robots.txt) y los Términos de Servicio. - Rate limiting: agrega pausas entre peticiones (
time.sleep(1)) para no sobrecargar el servidor.
¿Qué herramienta usar? — Árbol de decisión
(datos que aparecen después de un segundo)?
La página usa JavaScript (React, Vue, Angular o fetch). Selenium controla un navegador real y espera que el JS termine antes de extraer el HTML.
El HTML llega completo desde el servidor. Requests descarga la página y BeautifulSoup la parsea. Más rápido y sencillo que Selenium.
Comparación de herramientas
| Característica | Requests + BS4 | Selenium |
|---|---|---|
| Tipo de página | HTML estático | HTML dinámico (JS) |
| Velocidad | Muy rápido | Más lento (abre browser) |
| Complejidad | Baja | Media |
| Interacción | No (solo lectura) | Sí (clic, scroll, forms) |
| Consume recursos | Mínimos | Alto (lanza Chrome/Firefox) |
Requests + BeautifulSoup
Para páginas cuyo HTML llega completo desde el servidor.
Hacer la primera petición HTTP
Con requests.get(url) descargamos el HTML de cualquier página. Verificamos el código de estado antes de procesar.
find() vs find_all()
find() devuelve el primer elemento que coincide. find_all() devuelve una lista con todos. Podemos filtrar por tag, clase, id o atributo.
Selectores CSS con select()
soup.select() acepta selectores CSS igual que en JavaScript/jQuery: clases, ids, jerarquías, atributos.
Headers, errores y pausas
Algunos servidores bloquean peticiones sin User-Agent. Siempre verifica el status code y agrega pausas para scraping masivo.
Selenium — Páginas dinámicas
Para páginas que cargan datos con JavaScript (React, Vue, Angular, fetch).
Configurar WebDriver
Selenium lanza un navegador real (Chrome o Firefox). Con headless el navegador corre invisible en segundo plano.
WebDriverWait — Esperar que el JS cargue
Nunca uses time.sleep(5) fijo. WebDriverWait espera hasta que el elemento esté listo (máx. N segundos). Más robusto y rápido.
Clic, scroll y formularios
Selenium puede hacer clic en botones, llenar formularios, hacer scroll y manejar páginas paginadas de forma automática.
Extraer datos y cerrar el driver
Después de que el JS cargó, extrae los datos con find_elements(). Siempre cierra el driver al final para liberar memoria.
Guardar datos
Una vez extraídos los datos, elige el formato según el uso final.
CSV — módulo estándar de Python
No requiere instalar nada. csv.DictWriter escribe diccionarios directamente con encabezados automáticos.
Excel con openpyxl
Crea archivos .xlsx con varias hojas, estilos de celda y formatos profesionales.
pandas — múltiples formatos con un DataFrame
Con pandas puedes guardar en CSV, Excel, JSON y SQL desde el mismo objeto. Además incluye análisis y limpieza de datos.
SQLite — base de datos local sin servidor
Ideal para grandes volúmenes y consultas SQL. El módulo sqlite3 viene incluido en Python, no se instala nada.
🔬 Lab de Selectores CSS
Practica los selectores que usarías con soup.select() o find(). Escribe un selector y ve qué elementos coincidirían en el HTML de ejemplo.
HTML de ejemplo (tienda online):
Escribe un selector CSS:
Los resultados aparecerán aquí...
Diccionario Web Scraping
"html.parser" por defecto, incluido en Python.Videos educativos
Web Scraping con Python y Beautiful Soup — Curso completo
Web Scraping Básico con Requests y BeautifulSoup — Práctica
Tutorial Completo Selenium en Español — Desde cero
Selenium y BeautifulSoup juntos — Curso Python
Cuestionario
10 preguntas aleatorias del banco de 50. Calificación de 0 a 100.
Tu calificación: