Revisión de Bright Data y Alternativas: Migrando Sus Scrapers
Scraping and Proxy Management Expert
TL;DR:
- Bright Data enruta dos productos diferentes a través de un solo endpoint. Web Unlocker y SERP API ambos envían POST a
https://api.brightdata.com/request; solo elzoneen el cuerpo de la solicitud decide cuál responde. Por lo tanto, la migración comienza desmultiplexando tus zonas, no cambiando un nombre de host. - Tres cosas fallan en un puerto ingenuo, y ninguna de ellas genera un error útil: el encabezado de autenticación cambia de nombre, la respuesta llega como un sobre JSON en lugar de un marcado en bruto, y las dos superficies están en diferentes versiones de API.
- La automatización del navegador es la parte fácil. Ambos productos hablan CDP, por lo que el código de Playwright y Puppeteer sobrevive a una URL de conexión cambiada. Las credenciales se mueven de la información de usuario de la URL a un parámetro de consulta.
- Hay una fecha límite que obliga a la pregunta de todos modos. La propia FAQ de Bright Data establece que los certificados en los puertos proxy
22225y33335expiran el 25 de septiembre de 2026, y los llamadores deben moverse al puerto44445. Cada integración se abrirá antes de entonces. - Comienza gratis: el tablero de Scrapeless emite una clave que funciona contra cada superficie descrita aquí.
Qué es Bright Data
Bright Data vende la recopilación de datos web como un conjunto de productos de marca separada que se encuentran en una sola red proxy. Tres de ellos son importantes cuando estás moviendo el código del scraper:
- API Web Unlocker — le das una URL, maneja la rotación del proxy, huellas digitales y desafíos, y devuelve la página.
- API SERP — la misma tubería de solicitud dirigida a motores de búsqueda, donde pasas una URL de búsqueda completamente construida.
- API Browser — un Chrome alojado que controlas a través del Protocolo de DevTools de Chrome con Playwright, Puppeteer o Selenium.
El hecho estructural importante, y el que da forma a cada migración: los dos primeros son el mismo endpoint HTTP. Según la documentación de Web Unlocker de Bright Data y su documentación de API SERP, ambos productos aceptan un POST a https://api.brightdata.com/request que lleva zone, url y format. El valor zone es lo que enruta la llamada.
Eso es conveniente mientras estés en Bright Data y incómodo cuando te vayas, porque tu base de código probablemente tiene un helper de solicitud cuyo comportamiento depende de una cadena de configuración.
Características Clave
A través de esos tres productos, la superficie de solicitud es pequeña y consistente:
- La autenticación es una sola clave API de cuenta enviada como
Authorization: Bearer <key>. - El enrutamiento es por
zone, configurado en el tablero en lugar de en la solicitud. format: "raw"devuelve el cuerpo de respuesta del objetivo directamente.- El geo-dirigido, la fijación de sesión y los agentes de usuario móviles se expresan dentro del nombre de usuario proxy, utilizando sufijos como
-country-<code>y-session-<id>. - La API Browser se conecta en
wss://<username>:<password>@brd.superproxy.io:9222, según la referencia de configuración de la API Browser de Bright Data.
Productos y Precios
Bright Data pone precios por producto y por zona, por lo que una sola cuenta comúnmente lleva varias zonas con tarifas y límites separados. Ese modelo es la razón por la cual una migración rara vez es un cambio de una línea: la zona actúa como el límite de facturación y configuración, por lo que mudarse toca la atribución de costos así como el enrutamiento.
Scrapeless cobra por solicitud contra una clave, con la superficie elegida por el endpoint que llamas en lugar de por un objeto de tablero. Las cifras actuales para ambos lados viven en sus respectivas páginas de precios; esta guía mapea deliberadamente la mecánica en lugar de citar tarifas que cambian.
Rendimiento y Ajuste
La red proxy de Bright Data es grande y su tasa de éxito en desbloquear objetivos difíciles es la razón por la cual la mayoría de los equipos la adoptan en primer lugar. Nada en esta guía argumenta que el producto no funciona.
Lo que mueve a los equipos suele ser estructural en lugar de técnico: configuración por zona que se desplaza, facturación que es difícil de atribuir a un trabajo específico, y la sobrecarga operativa de mantener varias zonas alineadas. Esas son las condiciones bajo las cuales "mover el código" se convierte en una pregunta real.
La Alternativa Scrapeless
Scrapeless divide el mismo trabajo entre superficies que se eligen por URL en lugar de por configuración:
- API de Scraping Universal —
POST https://api.scrapeless.com/api/v2/unlocker/requestpara la obtención de páginas desbloqueadas. - API de Scraping —
POST https://api.scrapeless.com/api/v1/scraper/requestcon unactorque nombra la superficie objetivo, respondiendo en línea con campos analizados. - Navegador de Scraping — un endpoint CDP en
wss://browser.scrapeless.com/api/v2/browser, con la clave pasada como untokenparámetro de consulta.
Una clave cubre los tres. No hay un objeto de zona, lo que elimina el viaje de ida y vuelta al panel, pero también significa que la demultiplexión tiene que suceder en tu código durante el puerto.
Donde Bright Data Todavía Tiene la Ventaja
Tres cosas son genuinamente más fáciles de hacer en Bright Data que después de un puerto:
- El modelo de zona es genuinamente conveniente cuando muchos trabajos comparten un sitio de llamada y deseas cambiar el comportamiento sin una implementación.
- Selenium es compatible con la API del Navegador. El Navegador de Raspado Sin Scrapeless es solo para CDP, por lo que un conjunto basado en Selenium necesita reescribirse en Playwright o Puppeteer en lugar de simplemente redirigir.
- Modificadores de nombre de usuario de proxy como
-country-y-session-expresan geolocalización y fijación de sesión sin tocar el cuerpo de la solicitud, en lo que algunas bases de código se apoyan fuertemente.
Donde el Modelo Te Custa
- Un endpoint, dos productos significa que el análisis estático no puede decirte lo que una llamada dada realmente hace sin resolver la zona.
- La configuración vive fuera del repositorio, por lo que un cambio de zona es invisible para la revisión de código y para
git blame. - El desgaste del puerto y del certificado recae sobre ti. La FAQ general de Bright Data indica que los certificados antiguos en los puertos
22225y33335expirarán el 25 de septiembre de 2026 a las 00:00 UTC, y que los llamadores que aún están en esos puertos deben completar la mudanza al puerto44445antes de esa fecha.
Implementación: Portar el Código
Esta es la parte que otros informes de migración omiten. Cada subsección a continuación es una diferencia real que produce un resultado incorrecto en lugar de un error claro.
El Mapa de Endpoint y Parámetro
| Preocupación | Bright Data | Scrapeless |
|---|---|---|
| Obtención de página desbloqueada | POST https://api.brightdata.com/request · {"zone","url","format":"raw"} |
POST https://api.scrapeless.com/api/v2/unlocker/request · {"actor":"unlocker.webunlocker","input":{"url","js_render"}} |
| Resultados de búsqueda | el mismo endpoint, zona SERP · url es una URL de búsqueda preconstruida |
POST https://api.scrapeless.com/api/v1/scraper/request · {"actor":"scraper.google.search","input":{"q","gl","hl"}} · devuelve resultados analizados en línea |
| Automatización del navegador | wss://<user>:<pass>@brd.superproxy.io:9222 |
wss://browser.scrapeless.com/api/v2/browser?token=<key> |
| Autenticación | Authorization: Bearer <key> |
x-api-token: <key> |
| Enrutamiento de producto | zone en el cuerpo |
el endpoint más actor |
| Cuerpo de éxito | el cuerpo de respuesta del objetivo | sobreenvoltura JSON; marcado dentro data |
Rotura 1: El Encabezado de Autenticación Cambia de Nombre
El intento fallido más común intercambia el host y la clave pero mantiene el encabezado. Bright Data utiliza Authorization: Bearer; Scrapeless utiliza x-api-token. Una solicitud que lleva solo el encabezado antiguo no está autenticada, y la falla parece un problema de credenciales en lugar de un problema de nombre de encabezado.
bash
# Bright Data — illustrative, from the vendor's published example
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer ${BRIGHTDATA_API_KEY}" \
-d '{"zone":"YOUR_ZONE_NAME","url":"https://example.com","format":"raw"}' \
https://api.brightdata.com/request
bash
# Scrapeless — the same intent
curl -sS -X POST "https://api.scrapeless.com/api/v2/unlocker/request" \
-H "x-api-token: ${SCRAPELESS_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"actor":"unlocker.webunlocker","input":{"url":"https://example.com","js_render":false}}'
Rotura 2: La Respuesta Es una Sobreenvoltura
Con format: "raw" Bright Data devuelve el cuerpo del objetivo, por lo que los llamadores comúnmente hacen response.text y lo analizan. Scrapeless responde con un objeto JSON y coloca el marcado en data.
Un puerto que solo cambia la URL y el encabezado analizará una cadena JSON como si fuera HTML. Los selectores no devuelven nada, no se genera ninguna excepción, y el trabajo registra resultados vacíos. La solución es una línea, pero solo si sabes cómo hacerla.
python
import os
import requests
KEY = os.environ["SCRAPELESS_API_KEY"]
def fetch(url: str, js_render: bool = False) -> str:
"""Return page HTML. The envelope is unwrapped here, once."""
response = requests.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
headers={"x-api-token": KEY, "Content-Type": "application/json"},
json={"actor": "unlocker.webunlocker", "input": {"url": url, "js_render": js_render}},
timeout=90,
)
response.raise_for_status()
body = response.json()
# Bright Data with format:"raw" would have given you this directly as response.text
return body["data"]
html = fetch("https://example.com")
print(f"chars={len(html)} starts_with_doctype={html.lstrip().lower().startswith('<!doctype')}")
Mantén el desempaquetado en un helper. Repartir response.json()["data"] a través de los sitios de llamada es como la mitad de una base de código se porta y la otra mitad devuelve JSON silenciosamente.
Rotura 3: Las Dos Superficies Se Basan en Diferentes Versiones de API
Este captura a las personas que asumen que un proveedor tiene una API. La superficie desbloqueadora está en /api/v2/; el actor de búsqueda de Google está en /api/v1/. Publicar el actor de búsqueda en la ruta v2 devuelve HTTP 400 {"message":"unknown task type"} — un mensaje que parece un cuerpo mal formado y te envía a inspeccionar tus campos input, cuando el segmento de versión es el verdadero problema.
La llamada de búsqueda en sí es sincrónica. Responde en una sola ronda de ida y vuelta con resultados analizados, por lo que no hay un identificador de tarea y no hay bucle de sondeo.
python
import os
import requests
KEY = os.environ["SCRAPELESS_API_KEY"]
def search(query: str, gl: str = "us", hl: str = "en") -> dict:
"""Google SERP as structured JSON. Note the v1 path — the unlocker is v2."""
response = requests.post(
"https://api.scrapeless.com/api/v1/scraper/request",
headers={"x-api-token": KEY, "Content-Type": "application/json"},
json={"actor": "scraper.google.search", "input": {"q": query, "gl": gl, "hl": hl}},
timeout=120,
)
response.raise_for_status()
return response.json()
data = search("web scraping api")
print("sections:", sorted(data))
for row in data.get("organic_results", [])[:3]:
print(f" {row['position']}. {row['title'][:60]}")
print(f" {row['link']}")
El cambio más grande aquí es lo que regresa. La API SERP de Bright Data con format: "raw" te entrega el HTML del motor de búsqueda y lo analizan tú mismo. Scrapeless devuelve la página ya analizada — una llamada en vivo para web scraping api volvió con organic_results, pagination, related_searches, search_information y metadata, donde cada fila orgánica lleva position, title, link, snippet, source, favicon, redirect_link y snippet_highlighted_words.
Dos consecuencias para el puerto. Tu analizador HTML SERP se convierte en código muerto — elimínalo en lugar de portarlo. Y cualquier ensamblaje de cadena de consulta que poseas se convierte en muerto también, porque la consulta y la localidad se mueven a input como q, gl y hl en lugar de estar integradas en una URL.
Rotura 4: Las Credenciales del Navegador Cambian de Posición
Ambos productos exponen CDP, por lo que el código de automatización en sí se transfiere. Lo que cambia es dónde se encuentra la credencial: Bright Data la coloca en la información del usuario de la URL, Scrapeless en un parámetro de consulta.
python
import os
from playwright.sync_api import sync_playwright
# Bright Data (illustrative):
# wss://<username>:<password>@brd.superproxy.io:9222
endpoint = f"wss://browser.scrapeless.com/api/v2/browser?token={os.environ['SCRAPELESS_API_KEY']}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint)
page = browser.new_page()
page.goto("https://quotes.toscrape.com/", wait_until="domcontentloaded")
print("title:", page.title())
print("quotes on page:", len(page.query_selector_all(".quote")))
browser.close()
Este cambio de posición tiene una consecuencia operativa que vale la pena planificar. Muchas bibliotecas de registro y seguimiento eliminan automáticamente la información del usuario de la URL, pero dejan intactas las cadenas de consulta, por lo que una cadena de conexión que anteriormente se redaccionó de forma predeterminada puede comenzar a aparecer en los registros. Filtra por el parámetro token antes de que lo envíes.
Dos restricciones de tamaño antes de comenzar: el Navegador de Scraping de Scrapeless habla solo CDP, por lo que un suite de Selenium es una reescritura en lugar de un reproceso, y connect_over_cdp se adjunta a un navegador remoto en lugar de lanzar uno, por lo que cualquier argumento launch() en tu código actual no tiene destino.
Un Orden de Migración Que Funciona
- Haz un inventario de tus zonas y etiqueta cada una como con forma de desbloqueador o con forma de SERP. Este es el paso de desmultiplexión y es la única parte genuinamente manual.
- Porta primero la ruta del desbloqueador: es un cambio de encabezado más el desenvuelto del sobre, en un solo helper.
- Porta la ruta de SERP en segundo lugar, cambiando a la ruta v1 y eliminando tanto tu ensamblaje de URL como tu analizadores de HTML.
- Reorienta la automatización del navegador en último lugar; es el cambio más pequeño.
- Ejecuta ambas pilas contra la misma lista de URL y diferencia los campos extraídos, no los bytes en bruto. La marca difiere inofensivamente entre las recuperaciones; los valores extraídos no deberían.
Casos de Uso Que Migran Limpiosamente
- Monitoreo de precios y catálogos: con forma de desbloqueador, un helper, el volumen más alto y la parte más fácil.
- Seguimiento de rankings y monitoreo de SERP: gana campos estructurados, pierde el ensamblaje de URL.
- Agentes y tuberías de recuperación de RAG: la salida de SERP analizada cae directamente en un paso de recuperación, eliminando una etapa de análisis en lugar de agregar una.
El caso que no migra limpiamente es una suite de navegador basada en Selenium, por la razón dada anteriormente. Presupuesta eso por separado en lugar de incluirlo en el mismo sprint.
Comparación de Precios
La comparación honesta es estructural en lugar de numérica. Bright Data atribuye el costo a una zona, por lo que el gasto se agrupa por objeto de configuración y un trabajo que abarca dos zonas aparece en dos lugares. Scrapeless atribuye el costo a las solicitudes contra una clave, por lo que la atribución sigue la ruta de código que realizó la llamada.
Si estás migrando parcialmente para tener visibilidad de costos, esa diferencia es más importante que la tarifa principal. Consulta los números actuales en la página de precios de Scrapeless y en la propia página de precios de Bright Data antes de modelar cualquier cosa.
Recursos Relacionados
- ¿Todavía eligiendo en lugar de portar? La comparación de alternativas de Bright Data para proxies clasifica el campo por superficie.
- La página del producto de la API de Scraping Universal documenta la superficie del desbloqueador en su totalidad.
- La referencia del Protocolo DevTools de Chrome cubre el formato de wire que ambos productos de navegador utilizan.
Conclusión
Una migración de Bright Data es pequeña en tamaño de diferencia y fácil de realizar de manera sutilmente incorrecta. El endpoint y la clave son la mitad visible; la mitad que cuesta un ciclo de depuración es que un endpoint de Bright Data se asigna a dos superficies de Scrapeless, que el cuerpo llega envuelto y que esas dos superficies se encuentran en diferentes versiones de API. Porta primero la ruta del desbloqueador, mantén el desenvuelto del sobre en un solo helper y diferencia los campos extraídos en lugar de HTML en bruto cuando realices el cambio.
Si tu integración todavía está en puertos 22225 o 33335, tienes una fecha límite en el calendario independientemente de qué proveedor termines utilizando. Ese es un momento razonable para decidir deliberadamente en lugar de bajo presión de tiempo a finales de septiembre.
¿Listo para Mover Tus Scrapers?
Crea una clave en el dashboard de Scrapeless y ejecuta el fragmento del desbloqueador anterior contra una URL que ya estés colectando. Comparar los campos extraídos contra tu salida actual es una prueba de quince minutos que responde la mayoría de las preguntas sobre la migración.
FAQ
P: ¿Cuánto tiempo tarda realmente una migración de Bright Data?
Para una integración solo de desbloqueador, unas pocas horas: un cambio de encabezado, un desenvuelto de sobre en un solo helper y una ejecución de diferencia. Un camino de SERP suele ser más rápido de lo esperado, porque eliminas más código del que escribes: el analizador de HTML y el ensamblaje de URL ambos desaparecen. Una suite de navegador de Selenium es la excepción y debe ser scoped por su cuenta.
P: ¿Necesito recrear mis zonas?
No — no hay un objeto de zona para recrear. Una clave cubre cada superficie. El trabajo se traslada a tu código en su lugar: cada zona debe clasificarse como de forma de desbloqueador o de forma SERP para que el sitio de llamada sepa qué punto final utilizar.
Q: ¿Seguirá funcionando mi código de Playwright o Puppeteer?
Sí. Ambos proveedores exponen un WebSocket CDP, por lo que el cuerpo de automatización se transfiere sin cambios y solo varía la cadena de conexión. Selenium es la excepción: el Scrapeless Scraping Browser es solo CDP.
Q: ¿Por qué mi código trasladado devuelve resultados vacíos sin generar un error?
Casi siempre es el sobre de respuesta. Bright Data con format: "raw" devuelve el cuerpo de la página, mientras que Scrapeless devuelve JSON con la etiqueta dentro data. Analizar el sobre como HTML no genera coincidencias ni excepciones. Cambia response.text a response.json()["data"].
Q: ¿Qué sucede el 25 de septiembre de 2026?
Las preguntas frecuentes de Bright Data indican que los certificados en los puertos 22225 y 33335 expiran a las 00:00 UTC ese día, y que el tráfico debe trasladarse al puerto 44445. Eso se aplica tanto a quedarse en Bright Data como a irse, así que trátalo como una restricción de programación más que como un argumento en cualquier dirección.
Q: ¿Puedo ejecutar ambos proveedores a la vez durante el cambio?
Sí, y es el enfoque recomendado. Mantén ambos caminos detrás de una interfaz, envía una muestra de tráfico a cada uno y compara los campos extraídos. Cambia por trabajo en lugar de hacerlo todo a la vez, comenzando con la carga de desbloqueador de mayor volumen.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



