API de Desbloqueio da Web: Renderize Qualquer Página em HTML, Markdown ou PNG
Advanced Data Extraction Specialist
TL;DR:
- O Web Unlocker transforma qualquer URL em dados limpos com um único POST. Envie uma URL para
unlocker.webunlocker; receba a página como HTML, texto simples, Markdown, uma captura de tela ou conteúdo extraído — sem navegador para gerenciar. - Renderização em JavaScript é uma bandeira, não um produto separado. Defina
jsRender.enabled: truee a página é renderizada em um navegador real antes da construção da resposta, então o conteúdo do lado do cliente já está disponível. - Você escolhe a forma da resposta.
response.typeé um dos valoreshtml,plaintext,markdown,png,jpeg,networkoucontent— solicite Markdown para LLMs, PNG para uma captura de tela,contentpara extração estruturada. - O país do proxy é um campo. Defina
proxy.countrypara direcionar a solicitação através de egressos residenciais naquela região; uma região incompatível é uma razão comum para que uma página seja renderizada de forma diferente. - Dois timeouts governam cada chamada. Um limite de 30 segundos para carregar a página e um limite global de 180 segundos para execução — o limite de carregamento da página tem prioridade.
- Gratuito para começar. Novas contas Scrapeless incluem uso gratuito da API de Scraping Universal — inscreva-se em app.scrapeless.com.
Introdução: um ponto final, qualquer página, a forma que você pediu
A maior parte do código de raspagem gasta seu esforço em tudo ao redor dos dados: iniciar um navegador, esperar pelo JavaScript, lidar com o bloqueio e, em seguida, analisar HTML em algo utilizável. A API de Scraping Universal da Scrapeless colapsa isso em uma única solicitação HTTP. Você POST uma URL para o ator Web Unlocker, e a resposta é a página — já renderizada, já no formato que você pediu.
Este guia percorre o ator unlocker.webunlocker de ponta a ponta: a forma da solicitação, um primeiro curl, o envelope da resposta, uma integração em Python, os sete tipos de resposta que a renderização em JavaScript pode retornar e como manter as solicitações limpas. Cada solicitação e resposta abaixo foi capturada contra a API ao vivo.
O que você pode fazer com isso
- Buscar uma página como HTML bruto — um GET simples através de um egress limpo, para quando você vai analisar a marcação por conta própria.
- Renderizar páginas pesadas em JavaScript — defina
jsRender.enablede leia o conteúdo que só existe após a execução do cliente. - Obter Markdown para um LLM — solicite
type: markdowne alimente o resultado diretamente em um pipeline RAG ou prompt. - Capturar uma captura de tela — solicite
type: pngoujpege obtenha a área renderizada como uma imagem. - Extrair conteúdo estruturado — solicite
type: contentpara puxar cabeçalhos, links, tabelas, e-mails, imagens e metadados da página. - Assistir às respostas da rede — solicite
type: networkpara capturar as respostas XHR/fetch que uma página faz, filtradas por URL, status e método. - Dirija a página primeiro — execute
instructions(aguardar um seletor, clicar, preencher, pressionar teclas) antes que a resposta seja construída.
Por que a API de Scraping Universal da Scrapeless
A API de Scraping Universal é a superfície gerenciada de desbloqueio da web: você envia uma URL, ela lida com renderização, egressos e anti-detecção, e retorna dados limpos. Para este fluxo de trabalho especificamente, ela traz:
- Renderização em JavaScript do lado da nuvem — um navegador real executa a página, então aplicativos de página única e conteúdo carregado lentamente são resolvidos antes que a resposta seja construída.
- Proxies residenciais em mais de 195 países — direcione através de
proxy.countrypara que a reputação do IP de saída seja limpa e páginas geograficamente roteadas sirvam corretamente. - Manejo automático de desafios — reCAPTCHA v2, Cloudflare Turnstile e o intersticial do Cloudflare são tratados dentro do ator.
- Sete formatos de resposta — HTML, texto simples, Markdown, PNG, JPEG, captura da rede e conteúdo estruturado do mesmo ponto final.
- Um único contrato HTTP — sem ciclo de vida do navegador, sem versões de driver; a resposta é os dados.
Obtenha sua chave API no plano gratuito em app.scrapeless.com.
Pré-requisitos
- Uma conta Scrapeless e chave API — inscreva-se em app.scrapeless.com
curlpara a primeira solicitação e Python 3.10+ (ou Node.js 18+) para a integração- Familiaridade básica com HTTP e JSON
Como o Web Unlocker funciona
Cada chamada é um POST para um ponto final com um corpo JSON de {ator, entrada, proxy}.
Parâmetros de solicitação
| Campo | Onde | Significado |
|---|---|---|
ator |
nível superior | unlocker.webunlocker |
input.url |
entrada | a página a ser buscada |
input.method |
entrada | método HTTP (padrão GET) |
input.redirect |
entrada | seguir redirecionamentos (true/false) |
input.jsRender |
entrada | { enabled, response, instructions, block } — opções de renderização |
proxy.country |
proxy | código ISO do país ou ANY |
A autenticação é o cabeçalho x-api-token. O envelope da resposta é sempre { "code": 200, "data": ... }.
Captura rápida com curl
Busque uma página como HTML através de um egress residencial:
bash
curl -X POST https://api.scrapeless.com/api/v2/unlocker/request \
-H "x-api-token: ${SCRAPELESS_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
```json
{
"ator": "unlocker.webunlocker",
"entrada": { "url": "https://www.example.com", "metodo": "GET", "redirigir": false },
"proxy": { "pais": "QUALQUER" }
}
Envelope de resposta
json
{
"codigo": 200,
"dados": "<!doctype html><html>…</html>"
}
Um codigo de 200 significa que a solicitação foi bem-sucedida; dados contém a carga útil — texto HTML aqui, Markdown ou uma imagem base64 para outros tipos de resposta.
Integrando a API em Python
A mesma chamada do Python, lendo a chave do ambiente:
python
import os
import requests
CHAVE_API = os.environ["SCRAPELESS_API_KEY"]
resp = requests.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
headers={"x-api-token": CHAVE_API, "Content-Type": "application/json"},
json={
"ator": "unlocker.webunlocker",
"entrada": {"url": "https://www.example.com", "metodo": "GET", "redirigir": False},
"proxy": {"pais": "QUALQUER"},
},
timeout=70,
)
dados = resp.json()
if dados.get("codigo") == 200:
html = dados["dados"]
print(len(html), "bytes de HTML")
Obtenha sua chave API no plano gratuito: app.scrapeless.com
Renderizando JavaScript: os sete tipos de resposta
Para renderizar a página em um navegador real primeiro, adicione jsRender. O response.type decide o que volta. Solicite Markdown para uma página — ideal para alimentar um LLM:
python
payload = {
"ator": "unlocker.webunlocker",
"proxy": {"pais": "QUALQUER"},
"entrada": {
"url": "https://www.example.com",
"jsRender": {
"ativado": True,
"resposta": {"tipo": "markdown"},
},
},
}
resp = requests.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
json=payload,
headers={"x-api-token": CHAVE_API, "Content-Type": "application/json"},
timeout=70,
)
print(resp.json()["dados"])
# "# Domínio de Exemplo\n\nEste domínio é para uso em exemplos de documentação..."
O campo tipo seleciona o formato:
response.type |
Retorna |
|---|---|
html |
HTML renderizado após a execução do JavaScript |
plaintext |
texto visível, marcação removida |
markdown |
a página como Markdown (pronto para LLM) |
png / jpeg |
uma captura de tela como uma string base64 |
network |
respostas XHR/fetch capturadas, filtradas por urls, status, methods |
content |
extração estruturada — títulos, links, tabelas, imagens, e-mails, metadados |
Para uma captura de tela, solicite png e decodifique os dados base64 em bytes:
python
import base64
payload["entrada"]["jsRender"]["resposta"] = {"tipo": "png"}
resp = requests.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
json=payload,
headers={"x-api-token": CHAVE_API, "Content-Type": "application/json"},
timeout=70,
)
with open("pagina.png", "wb") as f:
f.write(base64.b64decode(resp.json()["dados"]))
Dirigindo a página antes da captura
Quando o conteúdo aparece apenas após a interação, passe instruções — cada uma é um verbo que o renderizador executa em ordem antes de construir a resposta:
json
{
"ator": "unlocker.webunlocker",
"entrada": {
"url": "https://example.com",
"jsRender": {
"ativado": true,
"instruções": [
{ "esperarPor": [".conteudo-dinamico", 30000] },
{ "clicar": ["#carregar-mais", 1000] },
{ "preencher": ["#entrada-busca", "termo de busca"] },
{ "teclado": ["pressionar", "Enter"] },
{ "avaliar": "window.scrollTo(0, document.body.scrollHeight)" }
]
}
}
}
Você também pode reduzir a largura de banda bloqueando tipos de recursos que você não precisa com jsRender.block.resources (por exemplo, Imagem, Fonte, Mídia, Folha de Estilo), que a camada de busca ignora de acordo com as categorias de recursos definidas na Fetch API.
Como evitar problemas comuns
- Um campo que não está na página é nulo, não é um erro. Trate cada campo extraído como opcional e guarde sua ausência em vez de presumir que está presente.
- Cuidado com os dois limites de tempo. Um teto de carregamento de página de 30 segundos e um teto de execução global de 180 segundos limitam cada chamada, e o limite de carregamento da página tem prioridade — mantenha os valores de
esperarPordentro desse orçamento. A especificação de semântica HTTP define os códigos de status que você verá se um alvo em si resultar em erro. - Fixe o país ao conteúdo. Se uma página geo-ruta, defina
proxy.paispara a região que serve a versão que você deseja;QUALQUERestá bem quando não há necessidade. - Escolha o tipo de resposta deliberadamente. Solicite
markdownoucontentquando você quiser dados, nãohtmlque você terá que analisar — a extração acontece no lado do servidor de qualquer maneira, e os padrões de tráfego automatizado que o desbloqueador manipula estão catalogados em o projeto de Ameaças Automáticas OWASP.
Conclusão: a página, na forma que você precisa
O Web Unlocker reduz uma raspagem a uma decisão: qual URL e qual tipo de resposta. Renderização, saída e anti-detecção são tratados dentro do ator, assim uma página rica em JavaScript se torna Markdown limpo ou uma captura de tela em uma única solicitação. Combine-o com o Scraping Browser quando você precisar de uma sessão interativa completa, e leia sobre saída residencial versus datacenter uma vez que a reputação do proxy decide a maioria dos resultados de renderização. A documentação da API Universal de Raspagem cobre todos os campos.
Pronto para Construir Seu Pipeline de Dados Movido a IA?
Junte-se à nossa comunidade para reivindicar um plano gratuito e se conectar com desenvolvedores que constroem pipelines de extração: Discord · Telegram.
Inscreva-se em app.scrapeless.com para uso gratuito da API Universal de Raspagem, e veja preços para escala.
FAQ
Q: Qual é a diferença entre o Web Unlocker e o Scraping Browser?
O Web Unlocker é um endpoint de solicitação/resposta único — envie uma URL, receba a página de volta com uma chamada. O Scraping Browser é um navegador em nuvem interativo completo que você controla com Puppeteer ou Playwright. Use o desbloqueador para buscar e analisar; use o navegador para sessões em múltiplas etapas.
Q: Preciso habilitar a renderização JavaScript?
Somente quando o conteúdo que você precisa é renderizado no cliente. Um simples GET retorna o HTML do servidor; adicionar jsRender.enabled: true executa a página em um navegador real primeiro, que é o que você deseja para aplicativos de página única e conteúdo carregado sob demanda.
Q: Qual tipo de resposta devo usar para um pipeline LLM?
markdown — ele retorna a página como Markdown limpo com a marcação removida, que é o que a maioria dos pipelines RAG e de prompt deseja. Use content quando você precisar de campos discretos (títulos, links, tabelas) em vez de prosa.
Q: Como faço para obter uma captura de tela?
Defina response.type como png ou jpeg; o campo data retorna como uma string base64 que você decodifica para bytes de imagem.
Q: Preciso de um proxy?
A saída está integrada. Defina proxy.country para rotear através de IPs residenciais em uma região específica, ou ANY para deixar o serviço escolher. Definir um país é importante quando uma página utiliza roteamento geográfico ou desafia IPs de datacenter.
Q: Quais são os limites de tempo?
Um teto fixo de 30 segundos para carregamento de página e um teto global de execução de 180 segundos. O limite de carregamento de página tem prioridade e pode encerrar a chamada antes do limite global, então mantenha quaisquer valores waitFor dentro desse orçamento.
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.



