Scraping web sin ser bloqueado: 12 técnicas probadas

Tutorial sobre cómo extraer datos de sitios web sin ser bloqueado. Descubra 12 soluciones diferentes para superar los bloqueos de extracción de datos de sitios web.
28 min de lectura

Los bots representan ahora el 51 % del tráfico web. Los sitios web lo saben y están contraatacando. Los sistemas antibots de Cloudflare, Akamai y DataDome combinan ahora la reputación de IP, las huellas digitales TLS, las huellas digitales del navegador y el análisis del comportamiento para bloquear a los Scrapers antes de que se devuelva una sola línea de HTML. Si tu Scraper sigue siendo bloqueado, esta guía explica exactamente por qué y te ofrece 12 técnicas específicas para solucionarlo.

Resumen rápido: cómo rastrear sin ser bloqueado

  • Rote las direcciones IP utilizando Proxies residenciales. Las IP de los centros de datos se detectan fácilmente.
  • Configure encabezados HTTP completos, similares a los del navegador, incluyendo User-Agent y Referer.
  • Aleatorice el tiempo de las solicitudes con retrasos variables entre 2 y 10 segundos.
  • Utiliza un navegador sin interfaz con complementos de ocultación para pasar los controles de huellas digitales.
  • Gestiona los CAPTCHA automáticamente, ya que la resolución manual no es escalable.
  • Hacer coincidir la geolocalización del Proxy con la base de usuarios prevista del sitio de destino.
  • Utilice una API de scraping gestionada (como Web Unlocker de Bright Data) para automatizar todo lo anterior.

Por qué los sitios web bloquean los Scrapers web

Comprender por qué te bloquean es el primer paso para evitarlo. La detección no se produce después de descargar una página. A menudo ocurre en los primeros milisegundos de la conexión, antes de que se sirva cualquier HTML. Las técnicas antirraspado más comunes funcionan en combinación por capas, y para eludirlas es necesario coincidir con todas las capas simultáneamente.

Detección basada en IP

Cada solicitud que realiza lleva una dirección IP de origen. Los sistemas antibots mantienen bases de datos de reputación de rangos de IP de centros de datos conocidos (AWS, GCP, Azure, DigitalOcean), IP previamente marcadas e IP que muestran un alto volumen de solicitudes. Una sola IP que envía 500 solicitudes por minuto se identifica fácilmente. Las IP de los centros de datos están marcadas de forma predeterminada en muchos sitios de alta seguridad porque ningún usuario residencial real visita desde un centro de datos de AWS.

Huella digital del navegador y TLS

Todas las conexiones HTTPS comienzan con un protocolo de enlace TLS. Durante la fase ClientHello, su cliente transmite sus conjuntos de cifrado compatibles, la versión TLS, las extensiones y las preferencias de curva elíptica, todo en texto plano, antes de que se intercambie ningún contenido. Los sistemas antibots convierten estos datos en una huella digital (el estándar JA3 o JA4) y la comparan con las firmas de bots conocidos. La biblioteca de solicitudes de Python tiene una huella digital TLS distintiva que difiere de cualquier navegador real y es fácilmente detectada por Cloudflare y Akamai.

Más allá de TLS, los sitios web detectan el tipo de navegador a través de docenas de señales de JavaScript: navigator.webdriver, salida de renderizado de canvas, cadenas de GPU WebGL, fuentes instaladas, resolución de pantalla, comportamiento del contexto de audio y listas de complementos. Headless Chrome expone HeadlessChrome en su cadena de agente de usuario y deja navegador.webdriver = true establecido, lo que es una señal de detección inmediata en la mayoría de las principales plataformas antibots.

Análisis del comportamiento

Los sitios web no solo miran las solicitudes individuales. Observan los patrones a lo largo de toda una sesión. PerimeterX/HUMAN y sistemas similares miden el tiempo entre solicitudes, los patrones de desplazamiento, las trayectorias de movimiento del ratón, el comportamiento de los clics, la profundidad de navegación y la duración de la sesión. Un Scraper que envía solicitudes exactamente a intervalos de 1,0 segundos, nunca se desplaza, nunca mueve el ratón y salta directamente a páginas de productos profundas sin visitar la página de inicio se distingue inmediatamente de un humano.

CAPTCHAs y desafíos de JavaScript

Cuando un sitio sospecha de automatización, pero no está seguro, lanza un desafío. Cloudflare Turnstile, reCAPTCHA v3 y hCaptcha ejecutan pruebas de JavaScript que comprueban si hay artefactos de automatización. Si se fallan estos desafíos, o si no se ejecuta JavaScript, se produce un bloqueo o un bucle de redireccionamiento infinito.

Trampas honeypot

Algunos sitios inyectan enlaces ocultos en su HTML, invisibles para los usuarios reales a través de CSS (display: none), pero totalmente accesibles para los Scrapers que realizan el Parseo del HTML sin procesar. Seguir estos enlaces te marca como bot al instante. Un Scraper que sigue ciegamente todas las etiquetas <A href> de un documento acabará entrando en uno.

Las mejores técnicas para rastrear sitios web sin ser bloqueado

1. Rote sus direcciones IP con proxies

La rotación de IP es la técnica antidetección más fundamental. En lugar de enviar todas las solicitudes desde una única dirección IP, un grupo de proxies distribuye el tráfico entre cientos o miles de IP, de modo que ninguna IP acumula un volumen de solicitudes sospechoso. Aprender a rotar proxies en Python es una habilidad esencial para cualquiera que quiera crear un Scraper serio.

El patrón básico: enrutar cada solicitud a través de un punto final Proxy diferente e implementar una lógica de reintento automático cuando se bloquea una IP.

import requests
from itertools import cycle
import random
import time

proxies = [
    "http://proxy1.example.com:8080",
    "http://proxy2.example.com:8080",
    "http://proxy3.example.com:8080",
]

proxy_pool = cycle(proxies)

def fetch(url):
    proxy = next(proxy_pool)
    try:
        response = requests.get(
            url,
            proxies={"http": proxy, "https": proxy},
            timeout=10
        )
        response.raise_for_status()
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"Proxy {Proxy} failed: {e}")
        return None

# Añadir un retraso aleatorio entre solicitudes para evitar la limitación de velocidad.
time.sleep(random.uniform(2, 6))

Una operación de gran volumen necesita algo más que una simple rotación por turnos. Necesita una gestión inteligente de las sesiones, la retirada automática de direcciones IP y una selección geolocalizada. Por eso los scrapers de producción utilizan una infraestructura de proxies gestionada en lugar de una lista estática.

2. Utilizar proxies residenciales o móviles

No todos los proxies son iguales. Los proxies de centro de datos frente a los proxies residenciales representan una compensación fundamental entre el coste y el riesgo de detección. Los proxies de centro de datos enrutan el tráfico a través de IP de servidores en la nube: rápidos, baratos, pero inmediatamente identificables como no humanos por cualquier sistema antibots con una lista de bloqueo ASN.

Los proxies residenciales dirigen el tráfico a través de direcciones IP reales asignadas por el ISP y vinculadas a conexiones domésticas y empresariales reales. Para un sitio de destino, la solicitud parece provenir de un usuario real en una ciudad específica con un ISP específico. Los proxies móviles van más allá al dirigir el tráfico a través de IP de operadores móviles reales (4G/5G), que son aún menos propensos a ser incluidos en listas negras porque los operadores utilizan CGNAT (una IP compartida por muchos usuarios reales).

Tipo de Proxy Detectabilidad Velocidad Ideal para
Centro de datos Alta Muy rápida Sitios con baja seguridad, gran volumen
ISP/Estático Residencial Medio Rápido Identidad consistente, scraping basado en cuentas
Residencial Bajo Medio Comercio electrónico, viajes, plataformas sociales
Móvil Muy bajo Medio Contenido específico para móviles, sitios agresivos

Bright Data opera una red de más de 150 millones de IPs residenciales en más de 195 países, la mayor red de proxies residenciales de origen ético disponible. Para los casos en los que incluso las IPs residenciales son marcadas, más de 7 millones de IPs móviles proporcionan la mayor señal de confianza posible.

3. Establecer encabezados de solicitud realistas

La biblioteca de solicitudes de Python envía un conjunto mínimo de encabezados de forma predeterminada. En comparación con un navegador Chrome real, la diferencia es evidente de inmediato:

# Lo que envía requests por defecto:
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive

# Lo que envía realmente Chrome 121:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8
Aceptar idioma: en-US, en; q=0.9
Aceptar codificación: gzip, deflate, br, zstd
Conexión: mantener activa
Actualizar solicitudes inseguras: 1
Sec-Fetch-Dest: documento
Sec-Fetch-Mode: navegar
Sec-Fetch-Site: ninguno
Sec-Fetch-User: ?1

Los sitios comprueban los encabezados Accept, Accept-Language, Accept-Encoding, Sec-Fetch-* y el orden de los encabezados para distinguir los navegadores reales de los scripts. Establezca los encabezados que coincidan con el navegador real que dice ser, incluido el encabezado Referer cuando navegue entre páginas del mismo dominio. Para obtener más información, consulte nuestra guía sobre encabezados HTTP para el Scraping web.

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    «Accept-Encoding»: «gzip, deflate, br»,
    «Referer»: «https://www.google.com/»,
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "cross-site",
    "Upgrade-Insecure-Requests": "1",
}

response = requests.get(url, headers=headers)

4. Rotar agentes de usuario

Enviar la misma cadena de agente de usuario en cada solicitud es otra señal fácil de detectar. No todos los usuarios reales ejecutan Chrome 121 en Windows 10. Crea un conjunto de cadenas de agente de usuario realistas y activas recientemente, y rótalas. La regla fundamental: el agente de usuario al que rotas debe ser coherente internamente. Si afirmas ser Chrome en macOS, tus encabezados Accept-Language y Sec-CH-UA deben reflejarlo.

import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 similar a Mac OS X) AppleWebKit/605.1.15 (KHTML, similar a Gecko) Versión/17.2 Móvil/15E148 Safari/604.1",
]

headers["User-Agent"] = random.choice(user_agents)

Mantenga actualizado su conjunto de User-Agent. Las versiones de navegador de 2021 son en sí mismas una señal de detección, ya que es estadísticamente improbable que representen el tráfico real en 2026.

5. Gestiona las huellas digitales TLS

Esta es la técnica que más se suele pasar por alto y la que derrota a los Scrapers que han hecho todo lo demás correctamente.

Cuando la biblioteca de solicitudes de Python inicia una conexión HTTPS, la pila TLS subyacente (OpenSSL o similar) envía un ClientHello con una combinación específica de conjuntos de cifrado y extensiones. Esta combinación se convierte en un valor JA3 que es claramente distinto al de un navegador. Cloudflare, Akamai y DataDome comprueban esta huella digital antes de servir cualquier contenido, por lo que puede ser bloqueado incluso antes de que se evalúen sus encabezados.

La solución: utilizar un cliente HTTP que suplante la pila TLS de un navegador real. curl_cffi es el estándar actual para Python:

from curl_cffi import requests as curl_requests

# impersonate="chrome121" le indica a curl_cffi que utilice exactamente los
# conjuntos de cifrado TLS, las extensiones y la configuración HTTP/2 de Chrome 121.
response = curl_requests.get(
    "https://example.com",
    impersonate="chrome121",
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
    })


print(response.status_code)

curl_cffi envuelve curl-impersonate, una compilación de libcurl que imita las huellas digitales TLS de navegadores reales a nivel criptográfico. El requisito fundamental: su User-Agent debe coincidir con el perfil del navegador que está suplantando. Enviar una huella digital TLS de Chrome 121 junto con un User-Agent de Firefox crea una inconsistencia que los sistemas avanzados detectan.

Para uso a escala de producción, Web Unlocker de Bright Data gestiona automáticamente la coincidencia de huellas digitales TLS sin necesidad de gestionar bibliotecas.

6. Utiliza un navegador sin interfaz gráfica con complementos de ocultación

Cuando el sitio de destino ejecuta desafíos de JavaScript, necesitas un navegador real. Comprender qué es un navegador sin interfaz y cómo funciona te proporciona una base para esta técnica. Playwright y Puppeteer automatizan Chromium, lo que permite la ejecución completa de JavaScript, el manejo de cookies y la representación dinámica de contenido.

El problema: el Chrome sin interfaz predeterminado se detecta fácilmente. Expone navigator.webdriver = true, una cadena de agente de usuario HeadlessChrome, la falta de complementos del navegador y dimensiones de pantalla anormales. Turnstile de Cloudflare y sistemas similares ejecutan más de 200 comprobaciones de JavaScript y detectan una sesión predeterminada de Playwright en milisegundos.

La solución es playwright-stealth, un complemento que corrige estos vectores de detección:

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()

    # Parchea navigator.webdriver, chrome runtime, ventanas de contenido iframe,
    # códecs multimedia y otros artefactos de automatización.
    stealth_sync(page)

    page.goto("https://example.com")
    print(page.title())
    browser.close()

playwright-stealth gestiona los vectores de detección más comunes: navigator.webdriver, window.chrome, navigator.plugins, navigator.languages e inconsistencias de la API de permisos. Para los usuarios de Selenium, undetected-chromedriver es el equivalente, ya que parchea ChromeDriver a nivel binario.

Limitación importante: los complementos de ocultación reducen el riesgo de detección, pero no lo eliminan. Cloudflare Turnstile y Akamai Bot Manager han evolucionado significativamente y aún pueden detectar navegadores sin interfaz parcheados. Para obtener la máxima fiabilidad, el Navegador de scraping de Bright Data es un entorno de navegador preconfigurado, creado específicamente para superar estas comprobaciones de forma inmediata, sin necesidad de configurar ningún complemento.

7. Aleatorizar el tiempo y el comportamiento de las solicitudes

Los Scrapers que envían solicitudes en intervalos fijos, incluso si son generosos, pueden detectarse mediante el análisis de la sincronización. Los usuarios reales no visitan las páginas cada 2,0 segundos. Leen, se desplazan, hacen clic, se detienen y navegan de forma no lineal.

Utilice la distribución gaussiana (normal) para los retrasos. Esto produce una variación similar a la humana, en la que la mayoría de los retrasos se agrupan en torno a una media, pero ocasionalmente se prolongan:

import numpy as np
import time
import random

def human_delay(mean=4.0, std=1.5, min_delay=1.0):
    """Generar un retraso similar al humano utilizando la distribución normal."""
    delay = np.random.normal(mean, std)
    # Asegúrate de no bajar del mínimo
    delay = max(delay, min_delay)
    time.sleep(delay)

# Entre solicitudes de página
human_delay(mean=4.0, std=1.5)

# Entre acciones en la misma página (más rápido)
human_delay(mean=1.2, std=0.4)

Más allá de la sincronización, simule un comportamiento realista de la sesión con Playwright: desplácese por la página de forma incremental antes de extraer datos, mueva el ratón a los elementos antes de hacer clic y varíe el punto de entrada de su rastreo en lugar de navegar siempre directamente a la URL de destino.

# Simule el comportamiento de desplazamiento humano antes de extraer el contenido
page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.3)")
time.sleep(random.uniform(0.8, 2.0))
page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.7)")
time.sleep(random.uniform(0.5, 1.5))

8. Gestiona los CAPTCHA automáticamente

Los CAPTCHAs son un obstáculo, no un callejón sin salida, pero resolverlos manualmente no es viable. Para el scraping web de producción, necesitas un manejo automatizado de CAPTCHAs. Revisar los mejores solucionadores de CAPTCHAs para el scraping web te ayudará a elegir la herramienta adecuada para tu caso de uso.

Los principales enfoques son:

  • Servicios de resolución de terceros (2captcha, Anti-Captcha): envíe la imagen del CAPTCHA o la clave del sitio a solucionadores humanos o modelos de IA, reciba el token e inyéctelo en el formulario.
  • Gestión de puntuaciones de reCAPTCHA v3: reCAPTCHA v3 se ejecuta de forma silenciosa y asigna una puntuación de riesgo. Cuanto más alta sea su puntuación, menos probable será que vea un desafío, por lo que una buena higiene de sesión (encabezados realistas, sincronización, historial de navegación) mantiene las puntuaciones altas.
  • Soluciones gestionadas: Web Unlocker de Bright Data incluye un solucionador de CAPTCHA integrado que gestiona reCAPTCHA, hCaptcha y Cloudflare Turnstile de forma transparente sin necesidad de integración.
importar solicitudes

# Con Bright Data Web Unlocker, la resolución de CAPTCHA se realiza automáticamente
# antes de que se devuelva la respuesta. No es necesaria la integración de ningún solucionador.
respuesta = solicitudes.get(
    "https://target-site.com/product-page",
    proxies={
        "https": "https://username:[email protected]:33335"
    },
    verificar=False  # Web Unlocker utiliza su propio certificado SSL
)

print(response.status_code)  # Devuelve 200 con el contenido completamente renderizado

9. Evita las trampas honeypot

Los enlaces honeypot son invisibles para los usuarios reales, pero visibles en el HTML sin procesar. Seguir estos enlaces es una señal instantánea de bot.

Detéctelos antes de seguir los enlaces comprobando la visibilidad CSS:

from bs4 import BeautifulSoup

def is_visible(tag):
    """Devuelve False si el elemento está oculto mediante CSS."""
    style = tag.get("style", "")
    if "display:none" in style.replace(" ", "") or 
       "visibility:hidden" in style.replace(" ", ""):
        return False
    # Comprueba también los nombres de clases honeypot comunes
    classes = tag.get("class", [])
    honeypot_classes = {"hidden", "invisible", "honeypot", "trap"}
    if honeypot_classes.intersection(set(classes)):
        return False
    return True

soup = BeautifulSoup(html_content, "html.parser")
safe_links = [
    a["href"] for a in soup.find_all("a", href=True)
    if is_visible(a)
]

Esto no detecta todos los honeypots, ya que algunos están ocultos mediante clases CSS externas en lugar de estilos en línea. El método page.is_visible() de Playwright es más fiable porque evalúa el estilo CSS calculado en lugar de solo los atributos en línea.

10. Gestionar la limitación de velocidad con retroceso exponencial

En el caso de las respuestas HTTP 429 (demasiadas solicitudes), volver a intentarlo inmediatamente es contraproducente, ya que acelera el bloqueo. Implemente un retroceso exponencial para retroceder con elegancia y reanudar el rastreo sin provocar una prohibición más severa:

import time
import random
import requests

def fetch_with_backoff(url, headers, proxies, max_retries=5):
    """Reintentar con retroceso exponencial en respuestas de limitación de velocidad."""
    for attempt in range(max_retries):
        response = requests.get(url, headers=headers, proxies=proxies, timeout=15)

        if response.status_code == 200:
            return response
        elif response.status_code == 429:
            # Respetar el encabezado Retry-After si está presente.
            retry_after = int(response.headers.get("Retry-After", 2 ** attempt))
            print(f"Tasa limitada. Esperando {retry_after}s (intento {attempt + 1})")
            time.sleep(retry_after)
        elif response.status_code in (403, 503):
            # Probablemente bloqueado, rotar IP y retroceder
            print(f"Bloqueado (HTTP {response.status_code}). Retrocediendo...")
            time.sleep(2 ** intento + random.uniform(0, 1))
        else:
            response.raise_for_status()

    raise Exception(f"Se ha superado el número máximo de reintentos para {url}")

11. Adaptarse al contexto geográfico

Muchos sitios ofrecen contenidos diferentes o aplican una detección de bots más estricta en función del origen geográfico de las solicitudes. Un Scraper de precios de productos dirigido a un sitio de comercio electrónico estadounidense debe enrutar las solicitudes a través de IPs residenciales estadounidenses, no alemanas o singapurenses. Una geografía no coincidente crea una inconsistencia entre el origen de la solicitud y los encabezados Accept-Language o locale, que los sistemas de análisis de comportamiento pueden señalar.

La red de Proxies de Bright Data admite la segmentación por país, estado, ciudad y operador, lo que permite que sus solicitudes se originen en el contexto geográfico preciso que espera el sitio de destino. Puede explorar todas las ubicaciones de IP Proxy disponibles antes de crear su estrategia de segmentación geográfica.

12. Aprovecha las API subyacentes

Antes de crear un Scraper complejo, compruebe si el sitio de destino expone una API interna que consume su interfaz. Abra las herramientas de desarrollo de su navegador, vaya a la pestaña Red y observe las solicitudes XHR/Fetch mientras navega por el sitio. Muchos sitios, incluidas las grandes plataformas de comercio electrónico, cargan sus datos desde puntos finales JSON que son mucho más fáciles de llamar directamente que realizar el Parseo de HTML.

Estas API internas suelen tener respuestas JSON estructuradas (no es necesario el parseo de HTML), un menor escrutinio antibots que la página principal renderizada y parámetros de paginación que son fáciles de automatizar.

La contrapartida: las API internas no están documentadas, pueden cambiar sin previo aviso y pueden requerir tokens de autenticación que deben obtenerse a través del sitio principal. Pero cuando están disponibles y son estables, son la forma más eficiente de scraping disponible.

La forma más rápida: utilizar una API de Scraping web

Las 12 técnicas anteriores requieren una implementación individual, mantenimiento y adaptación continua a medida que evolucionan los sistemas antibots. A gran escala, la gestión de esta pila se convierte en el trabajo en sí.

La alternativa: consolidar toda la pila en una sola llamada a la API.

Bright Data Web Unlocker

Web Unlocker es una puerta de enlace Proxy basada en IA que gestiona automáticamente la rotación de IP, la coincidencia de huellas digitales TLS, la Resolución de CAPTCHA y la representación del navegador en función de los requisitos del sitio de destino. Usted realiza una solicitud HTTP estándar. Web Unlocker decide qué tipo de Proxy utilizar, qué huella digital presentar, si realizar la Resolución de CAPTCHA y si representar JavaScript, y luego devuelve contenido limpio independientemente de la complejidad antibots del sitio.

import requests

response = requests.get(
    "https://any-protected-site.com/data",
    proxies={"https": "https://user:[email protected]:33335"},
    verify=False,)


# Devuelve contenido totalmente renderizado y desbloqueado.
print(response.text)

Web Unlocker se prueba y actualiza continuamente con Cloudflare, Akamai, DataDome y PerimeterX. Una llamada a la API sustituye a 10 técnicas manuales.

Navegador de scraping de Bright Data

Para los sitios que requieren una interacción completa con el navegador, incluidos flujos de varios pasos, secuencias de inicio de sesión y SPA con mucho JavaScript, el Navegador de scraping proporciona una instancia de Chromium preconfigurada y accesible a través de CDP. Se integra directamente con Playwright y Puppeteer y supera las comprobaciones de huellas digitales de Cloudflare Turnstile y Akamai Bot Manager sin necesidad de configurar ningún complemento.

from playwright.sync_api import sync_playwright

SBR_WS_CDP = "wss://brd-customer-XXXX:[email protected]:9222"

with sync_playwright() as pw:
    browser = pw.chromium.connect_over_cdp(SBR_WS_CDP)
    page = browser.new_page()
    page.goto("https://cloudflare-protected-site.com")
    print(page.inner_text("body"))
    browser.close()

API de Bright Data Scraper

Para los equipos que necesitan datos estructurados de plataformas específicas sin escribir ni mantener ninguna infraestructura de scraping, las API de Bright Data Scraper ofrecen una biblioteca de más de 120 Scrapers listos para usar para los dominios más populares: Amazon, LinkedIn, Instagram, Zillow, Indeed, TikTok, Walmart, Booking.com, Glassdoor y muchos más.

Cada Scraper acepta una URL o una palabra clave como entrada, gestiona todo el desbloqueo y la representación internamente, y devuelve datos estructurados limpios en JSON o CSV. No es necesario gestionar Proxies, mantener analizadores sintácticos ni ajustar huellas digitales. Solo se paga por los registros entregados con éxito.

# Ejemplo: activar un rastreo de productos de Amazon a través de las API de Scraper
curl -H "Authorization: Bearer API_TOKEN" 
     -H "Content-Type: application/json" 
     -d '[{"url":"https://www.amazon.com/dp/B0CRMZHDG8","asin":"B0CRMZHDG8","zipcode":"94107"}]' 
     "https://api.brightdata.com/conjuntos_de_datos/v3/trigger?dataset_id=gd_l7q7dkf244hwjntr0&format=json"

Hay scrapers dedicados disponibles para plataformas de comercio electrónico, LinkedIn y canales de redes sociales, y los resultados se pueden entregar a través de webhook, sondeo de API o descarga directa. Para los dominios que aún no están cubiertos, Scraper Studio le permite crear un scraper personalizado utilizando IA sin necesidad de infraestructura.

Proxies residenciales de Bright Data

Para situaciones en las que gestiona su propia infraestructura de scraping, pero necesita un conjunto de direcciones IP fiable y a gran escala: la red de proxies residenciales de Bright Data cubre más de 150 millones de direcciones IP en más de 195 países, con una segmentación geográfica granular hasta el nivel de ciudad y operador. Incluye más de 7 millones de direcciones IP móviles para el tráfico de operadores móviles y proxies ISP para IPs residenciales estáticas con altos índices de confianza.

Sistemas antibots: a qué te enfrentas

Cloudflare

Cloudflare Bot Management es el sistema antibots más utilizado, que protege a millones de sitios web, incluidos la mayoría de los principales sitios de comercio electrónico y medios de comunicación. Funciona por capas: retos de JavaScript (incluido Turnstile), puntuación de reputación de IP, huellas digitales TLS/JA4 y análisis de comportamiento. La cookie cf_clearance de Cloudflare, una vez obtenida al superar un desafío en un navegador real, puede reutilizarse dentro de su TTL. La detección se basa en gran medida en la exposición de navigator.webdriver, conjuntos de encabezados inconsistentes y hash JA4 que no son de navegador. Para obtener una descripción técnica completa de los métodos que funcionan, consulte nuestra guía sobre cómo eludir Cloudflare.

Akamai Bot Manager

Akamai recopila datos de sensores del lado del cliente (canvas, fuentes, zona horaria, WebGL) a través de JavaScript inyectado y los valida del lado del servidor con el token de cookie abck. Cruza referencias de huellas digitales TLS/JA3 y tokens de sesión simultáneamente, por lo que no basta con corregir solo una capa. Akamai es común en sitios web de empresas minoristas, aerolíneas y financieras. Las suites de cifrado no coincidentes por sí solas pueden desencadenar un bloqueo suave o un 403.

DataDome

DataDome protege tanto contra el scraping del navegador como contra el scraping de la API con puntuación en tiempo real basada en ML. Valida conjuntamente el ASN de la IP, la cadencia de las solicitudes, la entropía del encabezado y las señales JavaScript del lado del cliente. Las validaciones fallidas devuelven una página distintiva con el mensaje «Acceso denegado. Desarrollado por DataDome». La automatización completa del navegador con IPs residenciales y sesiones persistentes funciona significativamente mejor contra DataDome que los clientes HTTP sin procesar.

PerimeterX / HUMAN

PerimeterX (ahora HUMAN Security) se especializa en el análisis del comportamiento, el seguimiento de los movimientos del ratón, las pulsaciones de teclas, la profundidad de desplazamiento, los eventos de enfoque/desenfoque y la sincronización a lo largo de una sesión completa para crear una huella digital del comportamiento. Compara las sesiones con las referencias humanas y asigna puntuaciones a los bots. En particular, utiliza una estrategia de aplicación retardada, que permite a los bots sospechosos navegar libremente mientras se acumulan pruebas de comportamiento antes de bloquearlos. Esto significa que sus primeras solicitudes pueden tener éxito antes de que se active el bloqueo.

Comparación: mecanismos de bloqueo y contramedidas

Mecanismo de bloqueo Técnica recomendada Solución de Bright Data
Prohibición de IP / límite de velocidad Rotación de IP con proxies Proxies residenciales (más de 150 millones de IP)
Detección de IP de centros de datos Uso de proxies residenciales o móviles Proxy ISP, Proxy móvil
Huella digital TLS curl_cffi con suplantación de navegador Web Unlocker (coincidencia TLS automática)
Huellas digitales del navegador Navegador sin interfaz + complementos de ocultación Navegador de scraping (sigilo integrado)
Desafíos CAPTCHA Solucionador automático de CAPTCHA Web Unlocker (solucionador integrado)
Análisis de comportamiento Aleatorización de tiempos + simulación de acciones humanas Navegador de scraping (comportamiento similar al humano)
Trampas honeypot Omisión de enlaces ocultos Navegador de scraping (navegación inteligente)
Desafíos de JavaScript Renderización completa del navegador Navegador de scraping, Web Unlocker
Bloqueo geográfico Proxies geolocalizados Más de 195 países de destino
Limitación de velocidad Retroceso exponencial Web Unlocker (limitación de velocidad gestionada)

Resumen

No existe una técnica única que pueda burlar todos los sistemas antibots. La detección moderna se basa en varias capas que incluyen la reputación de la IP, las huellas digitales TLS, las huellas digitales del navegador y el análisis del comportamiento, y para eludirla es necesario coincidir con todas las capas simultáneamente.

Para el desarrollo y el scraping de bajo volumen: comience con Proxies residenciales, encabezados realistas, curl_cffi para la gestión de huellas digitales TLS y Playwright con playwright-stealth para sitios con mucho JavaScript.

Para el scraping a escala de producción: la complejidad de mantener todas estas capas manualmente, incluyendo la rotación de huellas digitales, la actualización de plugins de ocultación, la gestión de grupos de proxies y la integración de solucionadores de CAPTCHA, es significativa. Las soluciones de Bright Data consolidan la rotación de IP, la gestión de huellas digitales TLS, la resolución de CAPTCHA y la representación del navegador en una sola llamada a la API. Así es como te centras en los datos, no en la infraestructura.

Preguntas frecuentes

¿Puede un sitio web saber si estás realizando scraping?

Sí. Los sitios web detectan a los Scrapers mediante la reputación de la IP, el análisis de los encabezados HTTP, las huellas digitales TLS, las huellas digitales del navegador, los retos CAPTCHA y el análisis del comportamiento. La mayor parte de la detección se produce en milisegundos antes de que se sirva el contenido de la página.

¿Por qué se bloquean los Scrapers web?

Los scrapers son bloqueados cuando realizan demasiadas solicitudes desde una IP, envían encabezados HTTP no humanos, fallan en las comprobaciones de huellas digitales TLS o del navegador, o activan desafíos CAPTCHA. Los Proxies residenciales y los navegadores sigilosos reducen todos estos riesgos.

¿Cuál es la mejor manera de realizar scraping sin ser bloqueado?

El enfoque más fiable combina Proxies residenciales rotativas, encabezados de solicitud realistas, retrasos aleatorios y un navegador sin interfaz con complementos de ocultación. Para el scraping a escala de producción, una solución gestionada como Web Unlocker de Bright Data se encarga de todo esto automáticamente, consolidando la rotación de IP, la gestión de huellas digitales TLS, la Resolución de CAPTCHA y la representación del navegador en una sola llamada a la API.

El scraping web de datos de acceso público suele ser legal en la mayoría de las jurisdicciones, especialmente en el caso de datos no personales y sin derechos de autor. Comprueba siempre el archivo robots.txt y los términos de servicio del sitio web de destino. El scraping web de datos personales puede estar restringido por el RGPD, la CCPA y otras leyes similares. En Estados Unidos, la sentencia del caso hiQ contra LinkedIn confirmó que el scraping web de datos públicos no viola la Ley de Fraude y Abuso Informático.

¿Qué es la huella digital TLS?

Las huellas digitales TLS identifican el tipo de cliente (navegador, bot o script) mediante el análisis de la combinación única de conjuntos de cifrado, versión TLS y extensiones utilizadas durante el protocolo HTTPS. Los sistemas antibots utilizan hash JA3 y JA4 para bloquear herramientas de scraping conocidas, como la biblioteca de solicitudes de Python. La implicación clave: ni siquiera los encabezados HTTP perfectamente realistas servirán de ayuda si su pila TLS se parece más a OpenSSL que a Chrome.

¿Por qué los proxies residenciales funcionan mejor que los proxies de centro de datos?

Los proxies residenciales enrutan el tráfico a través de direcciones IP reales asignadas por el ISP. Los sistemas antibots comprueban el ASN (número de sistema autónomo) de cada IP entrante. Las IP de los centros de datos pertenecen a ASN conocidos (AWS, GCP, etc.) que están bloqueados por defecto en sitios de alta seguridad. Las IP residenciales pertenecen a ISP como Comcast o BT, lo que las hace indistinguibles del tráfico real de los usuarios en la capa de red. Para obtener un desglose completo de las diferencias de rendimiento, consulte nuestra comparación entre proxies de centros de datos y proxies residenciales.