← Todas las respuestas

¿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 es Scrapy o httpx para rastrear y Beautiful Soup o lxml para parsear, más una capa por cada control antibots: curl_cffi cuando requests a secas queda bloqueado por su huella TLS, Playwright o una versión sigilosa como Camoufox para los desafíos de JavaScript, proxies residenciales o ISP cuando tu IP está marcada, 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, el tráfico de proxy o una API de pago cuestan más por página que una solicitud HTTP simple.

¿Qué herramienta de Python se encarga de cada control antibots?

Los sitios protegidos comprueban el handshake TLS, la ejecución de JavaScript, los rastros de automatización y la reputación de la IP, a menudo en la misma solicitud. Cada control tiene una solución de referencia:

CapaHerramientaQué hace
RastreoScrapyFramework de scraping de código abierto para Python; scrapy-playwright añade renderizado en navegador
ParseoBeautiful SoupBusca en el árbol de parseo, sobre lxml o html5lib
Huella TLS y HTTP/2curl_cffiSuplanta las huellas TLS/JA3 y HTTP/2 de los navegadores, algo que requests y httpx no pueden hacer; Python 3.10 o posterior
Desafíos de JavaScriptPlaywright para PythonAutomatiza Chromium, WebKit y Firefox, de forma síncrona o asíncrona
Rastros de automatizaciónCamoufox o PatchrightCamoufox: una versión de Firefox controlada con Playwright, marcada como en desarrollo; Patchright: un sustituto directo de Playwright, solo para Chromium
Reputación de la IPProxies residenciales o ISPSustituyen las IP de nube y de centro de datos, que los sitios protegidos suelen bloquear
Sitios difícilesScrapeUnblockerHTML renderizado o JSON por solicitud; Python 3.8 o posterior, una sola dependencia (httpx)

Según la documentación de Bot Management de Cloudflare, las huellas JA3 y JA4 reconocen a un cliente TLS por la forma en que abre una conexión, así que una cabecera User-Agent de navegador no basta para ocultar requests. Más información: Huella TLS en Python, Librerías de Python esenciales para web scraping.

¿Cuándo merece la pena pagar una API de scraping?

Una API de scraping merece la pena cuando mantener desbloqueados tus propios navegadores y proxies cuesta más que la tarifa por solicitud: las páginas de desafío resisten a curl_cffi y a un navegador sigiloso, la mayoría de las solicitudes necesitan proxies residenciales o las soluciones se rompen tras cada actualización del sitio. Si curl_cffi por sí solo devuelve el contenido real, sigue con tu propio stack; para páginas simples sin renderizado, las APIs basadas en créditos también pueden costar menos. ScrapeUnblocker factura 1 crédito por solicitud con el renderizado en navegador real incluido, desde 1,00 € por cada 1.000 solicitudes con pago por uso hasta unos 0,55 € por cada 1.000 en el plan Ultimate de 1.000 €. Una respuesta 403 (bloqueada) no se factura, y el registro incluye 500 solicitudes gratuitas. Según su documentación, ScraperAPI (scraperapi-sdk), Zenrows, ScrapingBee, Bright Data y Scrapfly también publican clientes para Python, y Scrapfly enumera una integración con Scrapy, así que compara el coste por página válida en tus propias URL.

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

Fuentes

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 (puede aplicarse IVA) · 500 solicitudes gratis al registrarte.