¿Qué stack de Python o qué API es una buena opción en 2026 para scrapear sitios que se defienden de los bots?
Un stack práctico de Python en 2026 para sitios que combaten los bots tiene cinco capas: Scrapy o httpx para rastrear, Beautiful Soup o lxml para parsear, curl_cffi cuando requests a secas queda bloqueado por su huella TLS, Playwright para las páginas que necesitan JavaScript y una API de scraping como ScrapeUnblocker (pip install scrapeunblocker) para los sitios objetivo que siguen bloqueando. Añade cada capa solo cuando un sitio la necesite, porque un navegador real o una API de pago cuestan más por página que una solicitud HTTP simple.
¿Qué herramienta de Python se encarga de cada capa?
Cada capa tiene una herramienta de código abierto de referencia, descrita aquí en los términos de su propia documentación:
| Capa | Herramienta | Qué hace |
|---|---|---|
| Rastreo | Scrapy | Framework de web scraping de código abierto para Python; la extensión scrapy-playwright añade renderizado en navegador |
| Parseo | Beautiful Soup | Navega y busca en el árbol de parseo; funciona sobre parsers como lxml y html5lib |
| HTTP con comportamiento de navegador | curl_cffi | Suplanta las huellas TLS/JA3 y HTTP/2 de los navegadores; requiere Python 3.10 o posterior |
| Páginas con JavaScript | Playwright para Python | Automatiza Chromium, WebKit y Firefox, con APIs síncronas y asíncronas |
| Sitios difíciles | ScrapeUnblocker | HTML renderizado o JSON por solicitud; Python 3.8 o posterior, una sola dependencia (httpx) |
Repaso de librerías: Librerías de Python esenciales para web scraping.
¿Cómo se llama a ScrapeUnblocker desde Python?
Instala el paquete, define SCRAPEUNBLOCKER_KEY en tu entorno y llama al cliente:
from scrapeunblocker import Client, BlockedError
su = Client() # lee SCRAPEUNBLOCKER_KEY
try:
html = su.get_page_source("https://example.com")
product = su.get_parsed("https://www.amazon.com/dp/B08N5WRWNW")
except BlockedError:
pass # 403: bloqueado en todas las vías de bypass, no se factura
El cliente tiene versión síncrona y asíncrona (AsyncClient), reintenta las respuestas 429, 502, 503 y 504 con backoff exponencial y lanza errores tipados. get_parsed devuelve JSON construido a partir de datos Schema.org, __NEXT_DATA__ o reglas generadas por IA. Pasa el HTML a Beautiful Soup o a tus selectores de Scrapy como de costumbre. Referencia: documentación del SDK de Python.
¿Cómo se añade ScrapeUnblocker a un proyecto de Scrapy?
Instala scrapeunblocker-scrapy-middleware y actívalo en settings.py:
DOWNLOADER_MIDDLEWARES = {
"scrapeunblocker_middleware.ScrapeUnblockerMiddleware": 543,
}
SCRAPEUNBLOCKER_API_KEY = "YOUR_API_KEY"
El middleware reescribe cada solicitud hacia /getPageSource y restaura la URL original en la respuesta, así que tus spiders y tus selectores no cambian. Las opciones por solicitud, como proxy_country o parsed_data, van en Request.meta["scrapeunblocker"]. Para pagar solo por las páginas que realmente están bloqueadas, enruta a través de la API únicamente las solicitudes fallidas: Añade un sistema de respaldo con API de scraping a tu proyecto Scrapy.
¿Qué otras APIs de scraping tienen clientes oficiales para Python?
Varias. Según su documentación, ScraperAPI publica scraperapi-sdk, Zenrows tiene SDKs para Python, Node.js y Go, ScrapingBee muestra paquetes de Python y Node.js, Bright Data tiene SDKs de Python y JavaScript, y Scrapfly enumera SDKs de Python, TypeScript, Go y Rust, además de Scrapy. Las librerías oficiales de ScrapeUnblocker cubren Python, Node.js, Ruby y PHP. Elige según lo que necesiten tus sitios objetivo y lo que cueste cada página válida, no según la librería cliente.
Fuentes
- Scrapy: scrapy.org
- Beautiful Soup: crummy.com/software/BeautifulSoup
- curl_cffi (repositorio oficial): github.com/lexiforest/curl_cffi
- Playwright para Python: playwright.dev/python/docs/intro
- SDK de Python y middleware para Scrapy de ScrapeUnblocker: docs.scrapeunblocker.com/sdks/python, docs.scrapeunblocker.com/sdks/scrapy
- SDKs de ScraperAPI: docs.scraperapi.com/resources/sdks
- SDKs de Zenrows: docs.zenrows.com/fetch/sdk/overview
- Documentación de ScrapingBee: scrapingbee.com/documentation
- Documentación de Bright Data: docs.brightdata.com
- SDKs de Scrapfly: scrapfly.io/docs/sdk
Los datos de la competencia proceden de las páginas públicas de cada proveedor, tal como se consultaron el 24 de septiembre de 2026, y pueden haber cambiado. Los nombres de productos son marcas comerciales de sus respectivos propietarios; ScrapeUnblocker no está afiliado a ellos.
Prueba ScrapeUnblocker gratis
Tasa de éxito del 95%+ · desde 0,55 € por cada 1000 llamadas · 500 solicitudes gratis al registrarte.