Cómo scrapear un sitio protegido por Cloudflare (guía 2026)
Cloudflare está delante de una gran parte de la web pública, así que un scraper que funciona en un sitio a menudo chocará con un muro en el siguiente. Normalmente lo notas como un HTTP 403 o 503, una página intersticial de "Just a moment...", o un checkbox de Turnstile en la página. Esta guía explica qué comprueba Cloudflare, las soluciones que funcionan sin tocar nada que no debas tocar, y dónde encaja la resolución de captchas. La respuesta corta: confirma que puedes scrapear el sitio, ve más despacio, envía peticiones que parezcan las de un cliente normal, usa un navegador real cuando la página necesite JavaScript, y solo entonces trata un captcha. Turnstile es el captcha que Cloudflare usa con más frecuencia. El soporte de Turnstile en Scarnox llegará pronto. El tipo de captcha activo hoy es PopularCaptcha.
Qué comprueba Cloudflare
Cloudflare puntúa cada petición según varias señales:
- Reputación de la IP. Las direcciones de los centros de datos en la nube empiezan con una puntuación más baja que las de las conexiones domésticas.
- Ritmo y patrón de peticiones. Cientos de peticiones por segundo desde una misma dirección parecen un bot, sin importar las cabeceras que envíes.
- Cabeceras y huella TLS. Una librería HTTP sin adornos suele enviar cabeceras, un orden de cabeceras y un handshake TLS que ningún navegador convencional enviaría.
- Ejecución de JavaScript. La página de desafío ejecuta scripts y comprueba que hay un entorno de navegador real.
- Cookies. Tras superar un desafío, Cloudflare emite una cookie de autorización ligada a esa sesión.
Una puntuación alta pasa en silencio. Una puntuación media recibe un desafío interactivo. Una puntuación baja recibe un bloqueo. La mayor parte del trabajo consiste en subir tu puntuación comportándote como un cliente bien educado, no en pelearte con la comprobación.
Paso 1: comprueba que puedes scrapear el sitio
Antes de cualquier trabajo técnico, lee el robots.txt del sitio y sus términos de servicio. Un bloqueo suele ser el propietario diciéndote algo. Scrapear páginas públicas despacio y con un propósito claro es una cosa. Forzar el paso de un bloqueo para llegar a datos que el propietario ha restringido es otra, y es un uso que Scarnox no soporta. La visión general legal cubre las preguntas generales.
Paso 2: haz bien la petición básica
Muchos scrapers que parecen "bloqueados" simplemente envían malas peticiones. Corrige primero estas:
- Envía un User-Agent actual y las cabeceras que enviaría un navegador, como
AcceptyAccept-Language. - Usa un único objeto de sesión para que las cookies persistan entre peticiones, como lo haría un navegador.
- Añade un retardo entre peticiones, con un poco de variación aleatoria.
- Retrocede ante las respuestas
429y503en lugar de reintentar en un bucle apretado.
import random
import time
import requests
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
})
def polite_get(url: str, attempts: int = 4) -> requests.Response:
r = None
for attempt in range(attempts):
r = session.get(url, timeout=30)
if r.status_code not in (429, 503):
return r
# Retroceso exponencial con variación: unos 1, 2, 4 segundos más ruido.
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
Si con esto consigues pasar, ya está. Mantén el retardo.
Paso 3: averigua a qué desafío te enfrentas
La respuesta te dice mucho:
- Una página de "Just a moment...". Es un desafío de JavaScript. Un navegador real normalmente lo supera solo tras unos segundos. La cookie de autorización puede reutilizarse después en las peticiones de la misma sesión.
- Un widget de Turnstile en un formulario o en una página. Es un captcha. Necesita un token del widget antes de que el formulario acepte un envío.
- Una página de bloqueo con un código de error. La dirección o la petición han sido rechazadas directamente. Cambiar tu ritmo y corregir tus peticiones suele ayudar más que cualquier otra cosa. Resolver no convierte un bloqueo duro en datos.
Comprobar cuál de estos ves te ahorra mucho esfuerzo inútil.
Paso 4: usa un navegador real cuando la página lo necesite
Si la página solo muestra contenido después de que se ejecute JavaScript, un cliente HTTP simple nunca lo verá. Controla un navegador completo con Playwright o Selenium. Un navegador headless es detectable, así que lee detección de navegadores headless antes de depender de uno, y configúralo para que coincida con el entorno en el que estaría un visitante real. La guía de sitios con JavaScript muestra un ejemplo completo.
Paso 5: revisa la reputación de tu IP
Las direcciones de los centros de datos en la nube son la razón más común por la que una petición limpia recibe una puntuación baja. Las direcciones residenciales suelen puntuar mejor, a costa de más velocidad y más dinero. El compromiso se explica en proxies residenciales frente a datacenter.
La rotación tiene sus propias trampas. Cambiar la dirección en cada petición resulta poco natural, porque un visitante real mantiene una dirección durante toda su visita. Las sesiones fijas, en las que se mantiene una dirección para un conjunto de peticiones relacionadas, suelen funcionar mejor que la rotación rápida. Proxies rotatorios para scraping entra en los detalles.
Paso 6: dónde encaja la resolución de captchas
A veces el widget sí aparece, en un formulario que estás probando o en una página que tienes permiso para automatizar. Un token de Turnstile es entonces un paso obligatorio de ese flujo. El soporte de Turnstile en Scarnox llegará pronto, así que no construyas código de producción sobre él todavía. El tipo de captcha activo hoy es PopularCaptcha, que usa un widget distinto.
El flujo general para cualquier captcha basado en tokens es el mismo. Lees la sitekey de la página, solicitas un token y colocas el token en el campo del formulario que espera el sitio. Los tokens son de vida corta, así que envíalos en cuanto los tengas. La guía de PopularCaptcha en Python muestra ese flujo de principio a fin, y tipos de captcha explicados compara los widgets con los que te encontrarás.
Si quieres estar listo cuando llegue el soporte de Turnstile, puedes empezar una prueba gratuita ahora. Empieza con crédito de prueba gratis, sin tarjeta: crea una cuenta. Para las tarifas actuales del tipo de captcha activo, consulta la página de precios.
Scrapea de forma responsable
- Lee el
robots.txty respeta los términos del sitio que scrapeas. - Limita la velocidad de tu rastreador, y ejecútalo en horas de baja actividad cuando puedas.
- Guarda las respuestas en caché para no pedir nunca la misma página sin motivo.
- Evita recopilar datos personales salvo que tengas una base legal para hacerlo.
- Si un sitio ha restringido el acceso, para. No intentes saltarte la restricción.