Como fazer scraping de um site protegido pela Cloudflare (guia de 2026)
A Cloudflare fica na frente de uma grande parte da web pública, então um scraper que funciona em um site costuma bater em um muro no próximo. Você normalmente percebe o problema como um HTTP 403 ou 503, uma página intermediária "Just a moment...", ou uma caixa do Turnstile na página. Este guia explica o que a Cloudflare verifica, as correções que funcionam sem tocar em nada que você não deveria tocar e onde a resolução de captcha se encaixa. A resposta curta: confirme que você pode raspar o site, desacelere, envie requisições que pareçam as de um cliente normal, use um navegador real quando a página precisar de JavaScript e só então lide com um captcha. O Turnstile é o captcha que a Cloudflare usa com mais frequência. O suporte da Scarnox ao Turnstile está em breve. O tipo de captcha ativo hoje é o PopularCaptcha.
O que a Cloudflare verifica
A Cloudflare pontua cada requisição com base em vários sinais:
- Reputação do IP. Endereços de data centers de nuvem começam com uma pontuação mais baixa do que endereços de conexões residenciais.
- Taxa e padrão de requisições. Centenas de requisições por segundo a partir de um mesmo endereço parecem um bot, independentemente dos cabeçalhos.
- Cabeçalhos e fingerprint TLS. Uma biblioteca HTTP pura costuma enviar cabeçalhos, a ordem deles e um handshake TLS que nenhum navegador convencional envia.
- Execução de JavaScript. A página de desafio roda scripts e verifica se há um ambiente de navegador real.
- Cookies. Depois que um desafio é superado, a Cloudflare emite um cookie de autorização preso àquela sessão.
Uma pontuação alta passa sem ser notada. Uma pontuação mediana recebe um desafio interativo. Uma pontuação baixa recebe um bloqueio. A maior parte do trabalho consiste em aumentar a sua pontuação agindo como um cliente bem-comportado, e não em combater a verificação.
Passo 1: verifique se você deve raspar o site
Antes de qualquer trabalho técnico, leia o robots.txt do site e os termos de serviço. Um bloqueio costuma ser o dono dizendo algo a você. Raspar páginas públicas com lentidão e com uma finalidade clara é uma coisa. Forçar a passagem por um bloqueio para chegar a dados que o dono restringiu é outra, e é um uso que a Scarnox não suporta. A visão geral jurídica cobre as questões gerais.
Passo 2: faça a requisição simples corretamente
Muitos scrapers que parecem "bloqueados" estão apenas enviando requisições ruins. Corrija estes pontos primeiro:
- Envie um User-Agent atual e os cabeçalhos que um navegador enviaria, como
AccepteAccept-Language. - Mantenha um único objeto de sessão para que os cookies persistam entre as requisições, como faria um navegador.
- Adicione um atraso entre as requisições, com um pouco de jitter aleatório.
- Recue diante de respostas
429e503, em vez de tentar de novo em um laço apertado.
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
# Backoff exponencial com jitter: cerca de 1, 2 e 4 segundos mais variação.
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
Se isso já resolve, você terminou. Mantenha o atraso no lugar.
Passo 3: descubra qual desafio você está enfrentando
A resposta indica muita coisa:
- Uma página "Just a moment...". É um desafio de JavaScript. Um navegador real normalmente passa por ele sozinho depois de alguns segundos. O cookie de autorização pode então ser reutilizado em requisições posteriores da mesma sessão.
- Um widget do Turnstile em um formulário ou página. É um captcha. Ele precisa de um token do widget antes que o formulário aceite um envio.
- Uma página de bloqueio com um código de erro. O endereço ou a requisição foram recusados de forma direta. Mudar o seu ritmo e corrigir as requisições costuma ajudar mais do que qualquer outra coisa. Resolver não transforma um bloqueio rígido em dados.
Identificar qual desses você está vendo evita muito esforço desperdiçado.
Passo 4: use um navegador real quando a página precisar
Se a página só mostra conteúdo depois que o JavaScript roda, um cliente HTTP simples nunca vai vê-lo. Use um navegador completo com Playwright ou Selenium. Um navegador headless é detectável, então leia detecção de navegador headless antes de depender de um, e configure-o para corresponder ao ambiente que um visitante real teria. O guia de sites com JavaScript mostra um exemplo completo.
Passo 5: observe a reputação do seu IP
Endereços de data centers de nuvem são o motivo mais comum de uma requisição limpa receber uma pontuação baixa. Endereços residenciais costumam ser pontuados melhor, a um custo maior em velocidade e dinheiro. O equilíbrio está explicado em proxies residenciais vs datacenter.
A rotação tem armadilhas próprias. Trocar o endereço a cada requisição parece artificial, porque um visitante real mantém um único endereço durante toda a visita. Sessões fixas, em que um endereço é mantido para um conjunto de requisições relacionadas, costumam funcionar melhor do que uma rotação rápida. Proxies rotativos para scraping entra nos detalhes.
Passo 6: onde entra a resolução de captcha
Às vezes o widget aparece, em um formulário que você está testando ou em uma página que você tem permissão para automatizar. Nesse caso, um token do Turnstile é uma etapa obrigatória no fluxo. O suporte da Scarnox ao Turnstile está em breve, então não construa código de produção sobre ele ainda. O tipo de captcha ativo hoje é o PopularCaptcha, que usa um widget diferente.
O fluxo geral para qualquer captcha baseado em token é o mesmo. Você lê o sitekey da página, solicita um token e coloca o token no campo de formulário que o site espera. Os tokens têm vida curta, então envie-os imediatamente. O guia de PopularCaptcha em Python mostra esse fluxo de ponta a ponta, e tipos de captcha explicados compara os widgets que você vai encontrar.
Se você quer estar pronto quando o suporte ao Turnstile for lançado, pode começar um teste grátis agora. Comece com crédito de teste grátis, sem cartão: crie uma conta. Para as tarifas atuais do tipo de captcha ativo, veja a página de preços.
Faça scraping com responsabilidade
- Leia o
robots.txte respeite os termos do site que você raspa. - Limite a taxa do seu crawler, e rode-o em horários de menor movimento quando puder.
- Guarde as respostas em cache para nunca buscar a mesma página duas vezes sem motivo.
- Evite coletar dados pessoais, a menos que tenha uma base legal para isso.
- Se um site restringiu o acesso, pare. Não tente contornar a restrição.