Come fare scraping di un sito protetto da Cloudflare (guida 2026)
Cloudflare si trova davanti a una larga parte del web pubblico, quindi uno scraper che funziona su un sito spesso si scontra con un muro sul successivo. Di solito te ne accorgi per un HTTP 403 o 503, per una schermata interstiziale "Just a moment...", oppure per una casella Turnstile nella pagina. Questa guida spiega cosa controlla Cloudflare, le soluzioni che funzionano senza toccare nulla che non dovresti toccare, e dove si colloca la risoluzione dei captcha. In breve: verifica di poter fare scraping del sito, rallenta, invia richieste che somigliano a un client normale, usa un browser reale quando la pagina ha bisogno di JavaScript, e solo dopo affronta un captcha. Turnstile è il captcha che Cloudflare usa più spesso. Il supporto di Scarnox per Turnstile è in arrivo. Il tipo di captcha attivo oggi è PopularCaptcha.
Cosa controlla Cloudflare
Cloudflare valuta ogni richiesta in base a diversi segnali:
- Reputazione dell'IP. Gli indirizzi dei data center cloud partono con un punteggio più basso rispetto agli indirizzi delle connessioni domestiche.
- Frequenza e schema delle richieste. Centinaia di richieste al secondo da un solo indirizzo sembrano un bot, qualunque siano le intestazioni.
- Intestazioni e fingerprint TLS. Una libreria HTTP essenziale spesso invia intestazioni, ordine delle intestazioni e un handshake TLS che nessun browser mainstream invierebbe.
- Esecuzione di JavaScript. La pagina di sfida esegue script e verifica che sia presente un vero ambiente di browser.
- Cookie. Dopo aver superato una sfida, Cloudflare emette un cookie di autorizzazione legato a quella sessione.
Un punteggio alto passa in silenzio. Un punteggio intermedio riceve una sfida interattiva. Un punteggio basso viene bloccato. Gran parte del lavoro consiste nel far salire il punteggio comportandosi da client corretto, non nel combattere il controllo.
Passo 1: verifica di poter fare scraping del sito
Prima di qualsiasi lavoro tecnico, leggi il robots.txt del sito e i suoi termini di servizio. Un blocco è spesso il titolare che ti dice qualcosa. Fare scraping di pagine pubbliche lentamente e per uno scopo chiaro è una cosa. Forzare il passaggio oltre un blocco per raggiungere dati che il titolare ha limitato è un'altra, e Scarnox non supporta quell'uso. La panoramica legale copre le domande generali.
Passo 2: fai bene la richiesta semplice
Molti scraper che sembrano "bloccati" stanno semplicemente inviando richieste scadenti. Correggi prima questi punti:
- Invia uno User-Agent attuale e le intestazioni che invierebbe un browser, come
AccepteAccept-Language. - Usa un unico oggetto sessione, così i cookie persistono tra le richieste, come farebbe un browser.
- Aggiungi un ritardo tra le richieste, con un po' di jitter casuale.
- Attendi il backoff sulle risposte
429e503invece di ritentare in un ciclo stretto.
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 esponenziale con jitter: circa 1, 2, 4 secondi più una variazione casuale.
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
Se questo ti fa passare, hai finito. Mantieni il ritardo.
Passo 3: capisci quale sfida stai affrontando
La risposta ti dice molto:
- Una pagina "Just a moment...". È una sfida JavaScript. Un browser reale di solito la supera da solo dopo qualche secondo. Il cookie di autorizzazione può poi essere riutilizzato per le richieste successive nella stessa sessione.
- Un widget Turnstile su un modulo o su una pagina. È un captcha. Serve un token dal widget prima che il modulo accetti un invio.
- Una pagina di blocco con un codice di errore. L'indirizzo o la richiesta sono stati respinti in modo netto. Cambiare il ritmo e correggere le richieste di solito aiuta più di qualsiasi altra cosa. Risolvere il captcha non trasforma un blocco rigido in dati.
Capire quale di queste situazioni stai vedendo ti fa risparmiare molto lavoro inutile.
Passo 4: usa un browser reale quando serve
Se la pagina mostra i contenuti solo dopo che JavaScript è stato eseguito, un client HTTP semplice non li vedrà mai. Pilota un browser completo con Playwright o Selenium. Un browser headless è rilevabile, quindi leggi rilevamento del browser headless prima di affidarti a uno, e configuralo in modo che corrisponda all'ambiente in cui si troverebbe un visitatore reale. La guida ai siti JavaScript mostra un esempio completo.
Passo 5: controlla la reputazione del tuo IP
Gli indirizzi dei data center cloud sono la causa più comune per cui una richiesta pulita riceve un punteggio basso. Gli indirizzi residenziali di solito ottengono punteggi migliori, a un costo più alto in velocità e denaro. Il compromesso è spiegato in proxy residenziali e datacenter.
Anche la rotazione ha le sue trappole. Cambiare indirizzo a ogni richiesta sembra innaturale, perché un visitatore reale mantiene un indirizzo per tutta la visita. Le sessioni persistenti, dove un indirizzo viene mantenuto per un gruppo di richieste correlate, spesso funzionano meglio di una rotazione rapida. Proxy rotanti per lo scraping approfondisce i dettagli.
Passo 6: dove si colloca la risoluzione dei captcha
A volte il widget compare davvero, su un modulo che stai testando o su una pagina che sei autorizzato ad automatizzare. Un token Turnstile diventa allora un passaggio obbligatorio di quel flusso. Il supporto di Scarnox per Turnstile è in arrivo, quindi non costruire codice di produzione su di esso. Il tipo di captcha attivo oggi è PopularCaptcha, che usa un widget diverso.
Il flusso generale per qualsiasi captcha basato su token è lo stesso. Leggi la sitekey dalla pagina, richiedi un token e inserisci il token nel campo del modulo che il sito si aspetta. I token sono di breve durata, quindi inviali subito. La guida Python per PopularCaptcha mostra quel flusso dall'inizio alla fine, e tipi di captcha spiegati confronta i widget che incontrerai.
Se vuoi essere pronto quando il supporto Turnstile sarà disponibile, puoi iniziare una prova gratuita da subito. Inizia con il credito di prova gratuito, senza carta: crea un account. Per le tariffe attuali del tipo di captcha attivo, consulta la pagina dei prezzi.
Scraping responsabile
- Leggi
robots.txte rispetta i termini del sito che sottoponi a scraping. - Limita la frequenza del tuo crawler, ed eseguilo in orari di minor traffico quando puoi.
- Metti in cache le risposte, così non scarichi mai la stessa pagina due volte senza motivo.
- Evita di raccogliere dati personali, a meno di avere una base giuridica per farlo.
- Se un sito ha limitato l'accesso, fermati. Non cercare di superare la restrizione.