Revisão do Bright Data e Alternativas: Migrando Seus Scrapers
Scraping and Proxy Management Expert
TL;DR:
- A Bright Data rote dois produtos diferentes por meio de um único ponto de extremidade. Web Unlocker e SERP API ambos POST para
https://api.brightdata.com/request; apenas ozoneno corpo da solicitação decide qual deles responde. A transição, portanto, começa pela desmultiplexação de suas zonas, não pela troca de um nome de host. - Três coisas quebram em uma porta ingênua, e nenhuma delas gera um erro útil: o cabeçalho de autenticação muda de nome, a resposta chega como um envelope JSON em vez de marcação bruta, e as duas superfícies estão em diferentes versões da API.
- A automação do navegador é o caminho fácil. Ambos os produtos falam CDP, então o código Playwright e Puppeteer sobrevive a uma URL de conexão alterada. As credenciais mudam do userinfo da URL para um parâmetro de consulta.
- Há um prazo que força a questão de qualquer maneira. O próprio FAQ da Bright Data afirma que os certificados nos ports de proxy
22225e33335expiram em 25 de setembro de 2026, e os chamadores devem mudar para o port44445. Cada integração está sendo aberta antes disso. - Comece grátis: o painel do Scrapeless emite uma chave que funciona contra cada superfície descrita aqui.
O que é a Bright Data
A Bright Data vende coleta de dados da web como um conjunto de produtos com marcas separadas em uma única rede de proxy. Três deles são importantes quando você está movendo o código do scraper:
- Web Unlocker API — você fornece uma URL, ele gerencia a rotação do proxy, impressões digitais e desafios, e retorna a página.
- SERP API — o mesmo pipeline de solicitação direcionado a mecanismos de busca, onde você passa uma URL de busca totalmente construída.
- Browser API — um Chrome hospedado que você controla através do Protocolo DevTools do Chrome com Playwright, Puppeteer ou Selenium.
O fato estrutural importante, e aquele que molda cada migração: os dois primeiros são o mesmo ponto de extremidade HTTP. De acordo com a documentação do Web Unlocker da Bright Data e sua documentação da SERP API, ambos os produtos aceitam um POST para https://api.brightdata.com/request carregando zone, url e format. O valor zone é o que roteia a chamada.
Isso é conveniente enquanto você está na Bright Data e complicado ao sair, porque seu código provavelmente tem um helper de solicitação cujo comportamento depende de uma string de configuração.
Principais Recursos
Através desses três produtos, a superfície de solicitação é pequena e consistente:
- A autenticação é uma única chave de API de conta enviada como
Authorization: Bearer <key>. - O roteamento é por
zone, configurado no painel em vez de na solicitação. format: "raw"retorna diretamente o corpo da resposta do alvo.- O geo-alvo, fixação de sessão e agentes de usuário móveis são expressos dentro do nome de usuário do proxy, usando sufixos como
-country-<code>e-session-<id>. - A Browser API conecta-se em
wss://<username>:<password>@brd.superproxy.io:9222, de acordo com a referência de configuração da Browser API da Bright Data.
Produtos e Preços
A Bright Data precifica por produto e por zona, então uma única conta normalmente carrega várias zonas com taxas e limites separados. Esse modelo é a razão pela qual uma migração raramente é uma mudança de uma linha: a zona também funciona como a fronteira de cobrança e configuração, então mudar dela toca a atribuição de custos, bem como o roteamento.
O Scrapeless precifica por solicitação contra uma chave, com a superfície escolhida pelo ponto de extremidade que você chama em vez de por um objeto de painel. Os números atuais para ambos os lados vivem em suas respectivas páginas de preços; este guia mapeia deliberadamente a mecânica em vez de citar taxas que mudam.
Desempenho e Adequação
A rede de proxy da Bright Data é grande e sua taxa de sucesso na desbloqueação de alvos difíceis é a razão pela qual a maioria das equipes a adota em primeiro lugar. Nada neste guia argumenta que o produto não funciona.
O que move as equipes é geralmente estrutural em vez de técnico: configuração por zona que varia, cobrança difícil de atribuir a um trabalho específico e a sobrecarga operacional de manter várias zonas alinhadas. Essas são as condições sob as quais "portar o código" se torna uma verdadeira questão.
A Alternativa Scrapeless
O Scrapeless divide o mesmo trabalho entre superfícies que são escolhidas por URL em vez de por configuração:
- API de Rastreamento Universal —
POST https://api.scrapeless.com/api/v2/unlocker/requestpara buscas de páginas desbloqueadas. - API de Scraper —
POST https://api.scrapeless.com/api/v1/scraper/requestcom umactornomeando a superfície alvo, respondendo inline com campos analisados. - Navegador de Rastreamento — um endpoint CDP em
wss://browser.scrapeless.com/api/v2/browser, com a chave passada como um parâmetro de consultatoken.
Uma chave cobre os três. Não há objeto de zona, o que remove a viagem de ida e volta do painel, mas também significa que a demultiplexação deve acontecer em seu código durante o porto.
Onde a Bright Data Ainda Tem a Vantagem
Três coisas são genuinamente mais fáceis de fazer na Bright Data do que após um porto:
- O modelo de zona é genuinamente conveniente quando muitos jobs compartilham um site de chamada e você quer mudar o comportamento sem uma implantação.
- Selenium é suportado contra a API do Navegador. O Scrapeless Scraping Browser é apenas CDP, então um conjunto baseado em Selenium precisa ser reescrito para Playwright ou Puppeteer ao invés de apenas redirecionar.
- Modificadores de nome de usuário de proxy, como
-country-e-session-, expressam geo e fixação de sessão sem tocar no corpo da solicitação, no qual alguns códigos se baseiam fortemente.
Onde o Modelo Custa a Você
- Um endpoint, dois produtos significa que a análise estática não pode lhe dizer o que uma chamada dada realmente faz sem resolver a zona.
- A configuração vive fora do repositório, então uma mudança de zona é invisível para a revisão de código e para
git blame. - A rotatividade de porto e certificado recai sobre você. O FAQ geral da Bright Data afirma que os antigos certificados nos portos
22225e33335expiram em 25 de setembro de 2026 às 00:00 UTC, e que os chamadores ainda nesses portos devem concluir a mudança para o porto44445antes dessa data.
Implementação: Portando o Código
Esta é a parte que outros escritos sobre migração pulam. Cada subseção abaixo é uma diferença real que produz um resultado errado ao invés de um erro claro.
O Mapa de Endpoint e Parâmetros
| Preocupação | Bright Data | Scrapeless |
|---|---|---|
| Busca 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 pesquisa | o mesmo endpoint, zona SERP · url é uma URL de pesquisa pré-construída |
POST https://api.scrapeless.com/api/v1/scraper/request · {"actor":"scraper.google.search","input":{"q","gl","hl"}} · retorna resultados analisados inline |
| Automação de navegador | wss://<user>:<pass>@brd.superproxy.io:9222 |
wss://browser.scrapeless.com/api/v2/browser?token=<key> |
| Auth | Authorization: Bearer <key> |
x-api-token: <key> |
| Roteamento de produto | zone no corpo |
o endpoint mais actor |
| Corpo de sucesso | o corpo da resposta do alvo | envelope JSON; marcação dentro de data |
Quebra 1: O Cabeçalho de Auth Muda de Nome
A tentativa mais comum e fracassada na primeira vez troca o host e a chave, mas mantém o cabeçalho. A Bright Data usa Authorization: Bearer; Scrapeless usa x-api-token. Uma solicitação que carrega apenas o antigo cabeçalho está não autenticada, e a falha parece um problema de credenciais ao invés de um problema de nome de cabeçalho.
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}}'
Quebra 2: A Resposta é um Envelope
Com format: "raw" a Bright Data devolve o corpo do alvo, então os chamadores comumente fazem response.text e o analisam. Scrapeless responde com um objeto JSON e coloca a marcação em data.
Um porto que muda apenas a URL e o cabeçalho irá analisar uma string JSON como se fosse HTML. Seletores não retornam nada, nenhuma exceção é levantada, e o job registra resultados vazios. A correção é uma linha, mas apenas se você souber fazê-la.
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')}")
Mantenha o desembrulhamento em um helper. Espalhar response.json()["data"] por sites de chamada é como metade de um código-base é portado e a outra metade silenciosamente volta JSON.
Quebra 3: As Duas Superfícies estão em Diferentes Versões de API
Esta pega pessoas que assumem que um provedor tem uma única API. A superfície desbloqueadora está em /api/v2/; o ator de pesquisa do Google está em /api/v1/. Postar o ator de pesquisa no caminho v2 retorna HTTP 400 {"message":"unknown task type"} — uma mensagem que parece um corpo malformado e faz você investigar seus campos input, quando o segmento da versão é o verdadeiro problema.
A chamada de pesquisa em si é síncrona. Ela responde em uma viagem de ida e volta com resultados analisados, então não há identificador de tarefa e nenhum loop de polling.
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']}")
A mudança maior aqui é o que retorna. A API SERP da Bright Data com format: "raw" lhe entrega o HTML do mecanismo de busca e você o analisa sozinho. Scrapeless retorna a página já analisada — uma chamada ao vivo para web scraping api voltou com organic_results, pagination, related_searches, search_information e metadata, onde cada linha orgânica carrega position, title, link, snippet, source, favicon, redirect_link e snippet_highlighted_words.
Duas consequências para o porto. Seu analisador HTML SERP se torna código inativo — exclua-o em vez de portá-lo. E qualquer montagem de string de consulta que você possui também se torna inativo, pois a consulta e o local mudam para input como q, gl e hl em vez de serem incorporados em uma URL.
Quebra 4: As Credenciais do Navegador Mudam de Posição
Ambos os produtos expõem CDP, então o código de automação em si é transferido. O que muda é onde a credencial fica — Bright Data a coloca nas informações do usuário da URL, enquanto Scrapeless em um 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()
Essa mudança de posição tem uma consequência operacional que vale a pena planejar. Muitas bibliotecas de registro e rastreamento removem automaticamente as informações do usuário da URL, mas mantêm as strings de consulta intactas, então uma string de conexão que antes era ocultada por padrão pode começar a aparecer nos logs. Filtre pelo parâmetro token antes de você enviar.
Duas restrições de tamanho antes de você começar: o Navegador de Rastreamento Scrapeless fala CDP apenas, então um conjunto Selenium é uma reescrita em vez de um redirecionamento, e connect_over_cdp se conecta a um navegador remoto em vez de lançar um, então quaisquer argumentos launch() em seu código atual não têm destino.
Uma Ordem de Migração que Funciona
- Inventarie suas zonas e rotule cada uma como com formato de desbloqueador ou com formato de SERP. Este é o passo de desmultiplexação e é a única parte genuinamente manual.
- Leve o caminho do desbloqueador primeiro — é uma mudança de cabeçalho mais a destruição do envelope, em um único assistente.
- Leve o caminho do SERP em segundo lugar, mudando para o caminho v1 e deletando tanto sua montagem de URL quanto seu analisador HTML.
- Redirecione a automação do navegador por último; é a menor diferença.
- Execute ambas as pilhas em relação à mesma lista de URLs e difira os campos extraídos, não os bytes brutos. A marcação difere de forma inofensiva entre as capturas; os valores extraídos não devem.
Casos de Uso que Migram Limpa
- Monitoramento de preços e catálogos — formato de desbloqueador, um assistente, o maior volume e o mais fácil.
- Rastreamento de classificações e monitoramento de SERP — ganha campos estruturados, perde a montagem da URL.
- Agente e pipelines de recuperação RAG — a saída SERP analisada vai direto para uma etapa de recuperação, removendo uma fase de análise em vez de adicionar uma.
O caso que não migra limpo é um conjunto de navegadores baseado em Selenium, pela razão dada acima. Orce isso separadamente em vez de incluir na mesma sprint.
Comparação de Preços
A comparação honesta é estrutural em vez de numérica. Bright Data atribui custo a uma zona, então o gasto é agrupado por objeto de configuração e um trabalho que abrange duas zonas aparece em dois lugares. Scrapeless atribui custo a solicitações contra uma chave, então a atribuição segue o caminho do código que fez a chamada.
Se você está migrando parcialmente por visibilidade de custo, essa diferença importa mais do que a taxa principal. Verifique os números atuais na página de preços do Scrapeless e na própria página de preços da Bright Data antes de modelar qualquer coisa.
Recursos Relacionados
- Ainda escolhendo em vez de portar? A comparação de alternativas da Bright Data para proxies classifica o campo por superfície.
- A página do produto Universal Scraping API documenta completamente a superfície do desbloqueador.
- A referência do Chrome DevTools Protocol cobre o formato de wire que ambos os produtos de navegador falam.
Conclusão
Uma migração da Bright Data é pequena em tamanho de diferença e fácil de errar sutilmente. O endpoint e a chave são a metade visível; a metade que custa um ciclo de depuração é que um endpoint da Bright Data mapeia para duas superfícies da Scrapeless, que o corpo chega embrulhado, e que essas duas superfícies estão em diferentes versões da API. Leve primeiro o caminho do desbloqueador, mantenha a destruição do envelope em um único assistente e difira os campos extraídos em vez de HTML bruto quando você migrar.
Se sua integração ainda estiver em portas 22225 ou 33335, você tem um prazo no calendário independentemente de qual provedor você acabar usando. Esse é um momento razoável para decidir deliberadamente em vez de sob pressão de tempo no final de setembro.
Pronto para Mover Seus Rastreadore?
Crie uma chave no painel do Scrapeless e execute o código do desbloqueador acima contra uma URL que você já coleta. Comparar os campos extraídos com sua saída atual é um teste de quinze minutos que responde à maioria das questões de migração.
FAQ
Q: Quanto tempo leva uma migração da Bright Data?
Para uma integração somente de desbloqueador, algumas horas: uma mudança de cabeçalho, uma destruição de envelope em um único assistente e uma execução de diferença. Um caminho SERP geralmente é mais rápido do que o esperado, porque você deleta mais código do que escreve — o analisador HTML e a montagem da URL vão embora. Um conjunto de navegadores Selenium é o caso à parte e deve ser dimensionado por conta própria.
Q: Preciso recriar minhas zonas?
Não — não há objeto de zona para recriar. Uma chave cobre todas as superfícies. O trabalho se move para seu código em vez disso: cada zona deve ser classificada como em forma de desbloqueador ou em forma de SERP para que o site de chamada saiba qual endpoint acessar.
P: Meu código Playwright ou Puppeteer ainda funcionará?
Sim. Ambos os provedores expõem um CDP WebSocket, então o corpo da automação permanece inalterado e apenas a string de conexão difere. O Selenium é a exceção: o Scrapeless Scraping Browser é apenas CDP.
P: Por que meu código portado retorna resultados vazios sem gerar um erro?
Quase sempre é o envelope de resposta. O Bright Data com format: "raw" retorna o corpo da página, enquanto o Scrapeless retorna JSON com a marcação dentro de data. Analisar o envelope como HTML não produz correspondências e não lança exceção. Altere response.text para response.json()["data"].
P: O que acontece em 25 de setembro de 2026?
O FAQ do Bright Data afirma que os certificados nas portas 22225 e 33335 expiram às 00:00 UTC naquele dia, e que o tráfego deve ser movido para a porta 44445. Isso se aplica tanto a permanecer no Bright Data quanto a sair, portanto trate isso como uma restrição de agendamento, em vez de um argumento de uma forma ou de outra.
P: Posso executar ambos os provedores ao mesmo tempo durante a transição?
Sim, e essa é a abordagem recomendada. Mantenha ambos os caminhos atrás de uma interface, envie uma amostra de tráfego para cada um e compare os campos extraídos. Faça a transição por trabalho em vez de tudo de uma vez, começando com a carga de trabalho de desbloqueador de maior volume.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



