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

CapaHerramientaQué hace
RastreoScrapyFramework de web scraping de código abierto para Python; la extensión scrapy-playwright añade renderizado en navegador
ParseoBeautiful SoupNavega y busca en el árbol de parseo; funciona sobre parsers como lxml y html5lib
HTTP con comportamiento de navegadorcurl_cffiSuplanta las huellas TLS/JA3 y HTTP/2 de los navegadores; requiere Python 3.10 o posterior
Páginas con JavaScriptPlaywright para PythonAutomatiza Chromium, WebKit y Firefox, con APIs síncronas y asíncronas
Sitios difícilesScrapeUnblockerHTML 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

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.