Python de Cero a Experto / Ruta scripting
Web scraping con BeautifulSoup
Muchas páginas web no ofrecen una API: los datos que quieres están dentro del HTML de la página. El WEB
SCRAPING es extraer esa información programáticamente. Con requests (para descargar la página) y
BeautifulSoup (para leer su HTML) puedes cosechar datos que solo existen en una página —precios, listados,
noticias—. Hoy aprendes la técnica, cuándo usar Playwright para páginas dinámicas, y las consideraciones
éticas y legales que NUNCA debes ignorar.
El lector que encuentra lo que buscas
Extraer datos del HTML
Como el scraping requiere descargar páginas reales de internet, esta lección muestra el código con bloques
—pruébalo tras pip install requests beautifulsoup4—:
import requests
from bs4 import BeautifulSoup
# 1. descargar la página con requests
respuesta = requests.get("https://ejemplo.com/productos")
respuesta.raise_for_status()
# 2. parsear el HTML con BeautifulSoup
sopa = BeautifulSoup(respuesta.text, "html.parser")
# 3. buscar elementos
titulo = sopa.find("h1") # el PRIMER <h1>
print(titulo.text) # su texto
# find_all: TODOS los que coincidan
productos = sopa.find_all("div", class_="producto")
for p in productos:
nombre = p.find("h2").text
precio = p.find("span", class_="precio").text
print(f"{nombre}: {precio}")
# buscar por atributos, con selectores CSS (como en el DOM del SC-02)
enlaces = sopa.select("a.enlace-externo") # <a class="enlace-externo">
for enlace in enlaces:
print(enlace["href"]) # el atributo hrefEl flujo es: requests.get descarga el HTML, BeautifulSoup(html, "html.parser") lo convierte en un árbol
navegable, y luego buscas: find(etiqueta) trae el primero, find_all(etiqueta, class_=...) trae todos los
que coincidan. También puedes usar SELECTORES CSS con .select("a.clase") —los mismos selectores del DOM que
viste en JavaScript (SC-02)—. De cada elemento sacas su .text (contenido) o sus atributos (p["href"]).
Así conviertes el HTML desordenado de una página en datos estructurados que puedes guardar en un CSV o JSON.
Páginas dinámicas y ética
¿Cuándo necesitas Playwright en vez de requests + BeautifulSoup, y qué regla ética es clave?
Mini-reto
Diseña (en papel o en tu Python) un scraper responsable: 1) describe cómo con requests + BeautifulSoup
extraerías todos los títulos (<h2>) de una página de noticias, usando find_all; 2) explica cómo sabrías
si esa página necesita Playwright (pista: ¿los datos están en "ver código fuente"?); 3) lista tres reglas
éticas que seguirías antes de scrapear un sitio. Reflexiona: ¿existe una API oficial que te evitaría el
scraping?
Qué sigue
Ya cosechas datos de la web. La próxima lección trae otra automatización muy demandada en el mundo laboral:
manejar archivos de EXCEL con openpyxl —leer y escribir hojas de cálculo desde Python—, para automatizar
reportes y procesar los datos tabulares que dominan las oficinas.