CodeForge

Python de Cero a Experto / Ruta scripting

Web scraping con BeautifulSoup

Teoría22 min20 XP

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—:

scraping.py
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 href

El 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.