¿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.txt del 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

¿La página carga el contenido con JavaScript
(datos que aparecen después de un segundo)?
🤖 Usa Selenium

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.

pip install selenium
🥣 Usa Requests + BeautifulSoup

El HTML llega completo desde el servidor. Requests descarga la página y BeautifulSoup la parsea. Más rápido y sencillo que Selenium.

pip install requests beautifulsoup4

Comparación de herramientas

Característica Requests + BS4 Selenium
Tipo de páginaHTML estáticoHTML dinámico (JS)
VelocidadMuy rápidoMás lento (abre browser)
ComplejidadBajaMedia
InteracciónNo (solo lectura)Sí (clic, scroll, forms)
Consume recursosMínimosAlto (lanza Chrome/Firefox)
NIVEL 1

Requests + BeautifulSoup

Para páginas cuyo HTML llega completo desde el servidor.

pip install requests beautifulsoup4

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.


    
NIVEL 2

Selenium — Páginas dinámicas

Para páginas que cargan datos con JavaScript (React, Vue, Angular, fetch).

pip install selenium

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.


    
NIVEL 3

Guardar datos

Una vez extraídos los datos, elige el formato según el uso final.

📄
CSV
Datos simples, importar a Excel, máxima compatibilidad
📊
Excel (.xlsx)
Formato con hojas, estilos y fórmulas para usuarios no técnicos
🗄️
SQLite
Consultas SQL, grandes volúmenes, no requiere servidor

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.

pip install openpyxl

    

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.

pip install pandas openpyxl

    

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:

Sugerencias:

Los resultados aparecerán aquí...

Diccionario Web Scraping

Web Scraping
Extracción automatizada de datos de páginas web mediante scripts que leen y procesan el HTML.
requests
Librería Python para hacer peticiones HTTP (GET, POST). Descarga el contenido HTML de una URL.
BeautifulSoup (bs4)
Librería para parsear HTML y XML. Permite navegar y buscar elementos usando Python de forma sencilla.
HTML Parser
Motor que interpreta el código HTML. BeautifulSoup usa "html.parser" por defecto, incluido en Python.
find() / find_all()
Métodos de BeautifulSoup. find() retorna el primer elemento; find_all() retorna una lista con todos los que coinciden.
select()
Método de BeautifulSoup que acepta selectores CSS para encontrar elementos, igual que JavaScript.
Status Code
Código de respuesta HTTP. 200 = éxito, 404 = no encontrado, 403 = acceso denegado, 500 = error del servidor.
User-Agent
Cabecera HTTP que identifica quién hace la petición. Configurarla como un navegador real evita bloqueos.
Selenium
Framework de automatización de navegadores. Permite controlar Chrome o Firefox desde Python para interactuar con páginas dinámicas.
WebDriver
Controlador que enlaza Selenium con el navegador instalado. Necesita el driver correspondiente (ChromeDriver para Chrome).
WebDriverWait
Mecanismo de Selenium para esperar a que un elemento aparezca en la página antes de intentar interactuar con él.
robots.txt
Archivo en la raíz de un sitio web que indica qué URLs pueden o no ser rastreadas por bots automáticos.
Rate Limiting
Práctica de agregar pausas entre peticiones (time.sleep) para no sobrecargar el servidor y evitar bloqueos por IP.
DataFrame
Estructura de datos de pandas que representa una tabla con filas y columnas, facilita guardar en CSV, Excel o SQL.
SQLite
Motor de base de datos ligero que guarda todo en un archivo .db local. Incluido en Python con el módulo sqlite3.

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.