Saltar al contenido principal
Herramientas de Python2026-07-29 · 10 min de lectura

Python Web Scraping en 2026: httpx + BeautifulSoup + Playwright: cuándo usar cuál

La mayoría de los tutoriales de "scraping web de Python" de 2018 todavía recomiendan "solicitudes + BeautifulSoup". La parte de "solicitudes" está bien, pero ahora hay mejores valores predeterminados y la mitad de la web moderna presenta contenido en JavaScript, por lo que la pila clásica devuelve silenciosamente páginas vacías.

Esta guía cubre el árbol de decisiones de 2026: cuándo httpx + BeautifulSoup es correcto (aún en más del 90 % de los sitios), cuándo recurrir a Playwright, cómo evitar ser bloqueado y las dos reglas que mantienen su scraper tanto legal como ético.

El árbol de decisiones en una imagen

▶ PYTHONeditable · runs in your browser

Eso es todo. El noventa por ciento de las tareas de scraping son HTML estático: la pila clásica (renombrada) es la herramienta adecuada. El resto necesita ejecución JS y Playwright es la respuesta moderna.

Paso 1: httpx + BeautifulSoup (el caso del 90%)

httpx es el reemplazo directo de solicitudes. Misma API, más soporte HTTP/2 y asíncrono nativo. BeautifulSoup no ha cambiado desde 2015; la elección del analizador es importante (lxml es 5 veces más rápido que el valor predeterminado).

▶ PYTHONeditable · runs in your browser

Opciones clave:

  • `headers={"User-Agent": ...}` — establece siempre una UA real (una dirección de contacto es educada). La UA httpx predeterminada a menudo está bloqueada.
  • `timeout=10` — nunca realice una solicitud ilimitada; Las conexiones colgadas filtran descriptores de archivos.
  • `raise_for_status()` — aumenta en 4xx/5xx para que las fallas sean ruidosas, no silenciosas.
  • `"lxml"` analizador: 5 veces más rápido que el html.parser predeterminado y más tolerante con HTML con formato incorrecto.
  • `soup.select("css-selector")` — trata el scraping como "imagina que estás usando document.querySelectorAll de JavaScript". Los selectores de CSS suelen ser lo que desea, no la API de recorrido por árboles.

Paso 2: Dramaturgo (cuando JS renderiza el contenido)

Muchos SPA modernos (React, Vue, Angular) envían un <div id="root"> vacío e hidratan todo del lado del cliente. httpx.get le proporciona un shell vacío: los datos que desea se cargan mediante fetch después de cargar la página.

Prueba: httpx.get(url).text: busca los datos que deseas. Si no está allí, el sitio necesita ejecución JS.

▶ PYTHONeditable · runs in your browser

Instalar: pip install playwright && playwright install chromium (la descarga del navegador es de ~150 MB; vale la pena una vez, es doloroso en cada ejecución de CI sin almacenamiento en caché).

Costo: Playwright es entre 10 y 50 veces más lento que httpx (carga de página + ejecución de JS + sobrecarga del navegador). Solo búsquelo cuando los datos no estén en el HTML estático.

Las cuatro formas de bloquearse

La mayoría de los sistemas anti-scraping vigilan estas cuatro huellas dactilares:

1. Agente de usuario faltante/obvio

▶ PYTHONeditable · runs in your browser

2. Sin demoras entre solicitudes

Las solicitudes secuenciales sin procesar golpean un servidor. Agregue un retraso proporcional a su tiempo de respuesta: si una página tarda 500 ms en publicarse, espere entre 500 y 2000 ms entre solicitudes. asyncio.sleep(random.uniform(0.5, 2.0)).

3. Solicitar rutas /robots.txt no permitidas

Algunos sitios usan robots.txt para señales de tasas legítimas; compruébelo antes de realizar el scraping:

▶ PYTHONeditable · runs in your browser

4. No coinciden las huellas digitales del navegador o TLS

El anti-scraping avanzado (Cloudflare, DataDome) toma huellas dactilares de su protocolo de enlace TLS y del entorno JS. httpx no se parece en nada a Chrome en la capa TLS. Opciones:

  • curl_cffi: una biblioteca basada en curl-impersonate que imita el TLS del navegador real.
  • Dramaturgo: navegador real TLS por definición.
  • Rotar los poderes residenciales: la opción nuclear.

Para el 99% de los casos de uso (sitios no hostiles, volumen moderado, no es necesario iniciar sesión), el respeto httpx + UA real + retraso + robots.txt es suficiente. Si estás rastreando sitios protegidos por Cloudflare a escala, necesitas navegadores reales o servicios de desbloqueo pagos.

Tasa de limitarte (el semáforo + patrón de sueño)

Para raspado masivo, combine asyncio.Semaphore (máximo concurrente) con asyncio.sleep (retraso por solicitud):

▶ PYTHONeditable · runs in your browser

Limitar a 5-10 concurrentes + 500 ms-2 s de retraso por solicitud lo mantiene muy por debajo de lo que activa las alarmas de límite de velocidad en la mayoría de los sitios.

Normas legales + éticas

1. Lea los Términos de servicio del sitio. Muchos prohíben el scraping por completo; aún puede hacerlo (los Términos de servicio son leyes contractuales, no leyes penales en la mayoría de las jurisdicciones), pero asume un riesgo legal. LinkedIn v. hiQ (2022) estableció que la extracción de datos públicamente visibles no es una violación de la CFAA en los EE. UU., pero usar una sudadera con capucha no te hace invisible.

2. No elimines datos personales. GDPR/CCPA/todo lo demás penaliza la recopilación de información personal sin consentimiento. Si está creando un conjunto de datos de "empleados de la Compañía X", deténgase.

Adiciones éticas que todos olvidan:

  • Enviar una dirección de contacto real en tu UA. Si su bot causa problemas, el propietario del sitio debería poder enviarle un correo electrónico.
  • Si almacena en caché los datos del sitio, hágalo de manera agresiva; no acceda a sus servidores en cada ejecución.
  • Prefiera las API públicas incluso si son de pago. Más barato que el riesgo legal.

El resumen de herramientas de 2026

| Tarea | Alcanzar |

|---|---|

| Páginas HTML estáticas | httpx + BeautifulSoup(html, "lxml") |

| SPA renderizado en JS | Dramaturgo (Chromium sin cabeza) |

| Cloudflare / anti-bot | curl_cffi o Dramaturgo + proxy residencial |

| Raspado de gran volumen | httpx.AsyncClient + Semáforo + suspensión |

| Datos API estructurados | httpx.get + .json() — no se necesita sopa |


El web scraping en 2026 sigue siendo en un 90 % httpx + BeautifulSoup, además de saber cuándo escalar a un navegador real. Domine los hábitos de raspado educado (UA real, semáforo, suspensión, robots.txt) y creará canales de datos duraderos sin ser bloqueado ni demandado.

Siguiente paso: la pista de ciencia de datos tiene 15 lecciones sobre scraping, ETL y pandas: creará un canal real de extremo a extremo desde la recuperación HTTP hasta el marco de datos y la exportación a CSV.

¿Listo para probarlo?

15 lecciones gratis después de un registro gratuito, sin tarjeta. Pruebe la plataforma y luego decida.

Empieza gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.