Scarnox · Blog

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:

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:

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:

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

Próximos passos