Scarnox · Blog

Captcha nel web scraping: perché compaiono e cosa fare

Un captcha compare durante lo scraping quando un sito decide che una richiesta sembra automatizzata. I fattori più comuni sono troppe richieste in poco tempo, un indirizzo IP con cattiva reputazione, segnali del browser mancanti o un accesso a una pagina che il sito protegge più strettamente del resto. La risposta pratica ha tre passaggi, in quest'ordine: ridurre i fattori scatenanti, rilevare il captcha nel codice e risolvere quelli che non puoi evitare. Questa guida copre ciascun passaggio e rimanda alle guide dettagliate per il resto.

Perché i siti mostrano captcha agli scraper

Un sito ha poche possibilità di distinguere una persona da uno script nel momento in cui una pagina viene richiesta, quindi osserva gli schemi. Uno scraper spesso si distingue perché:

Basta anche uno solo di questi fattori. Il captcha è il modo del sito di chiedere un passaggio simile a quello umano prima di servire altre pagine. Ridurre lo schema di solito riduce i captcha, ed è più economico che risolverli.

Rileva il captcha nel codice

Prima di risolvere qualcosa, verifica se la pagina che hai ricevuto è davvero la pagina del captcha. Un test semplice cerca il markup del widget e legge la sitekey:

import re
import requests

SITEKEY_RE = re.compile(r'data-sitekey="([0-9a-f-]{36})"')

def fetch(url: str) -> dict:
    resp = requests.get(
        url,
        timeout=30,
        headers={"User-Agent": "ExampleBot/1.0 (+https://example.com/bot)"},
    )
    html = resp.text
    if "h-captcha" in html or "g-recaptcha" in html:
        match = SITEKEY_RE.search(html)
        return {"captcha": True, "sitekey": match.group(1) if match else None, "html": html}
    return {"captcha": False, "sitekey": None, "html": html}

page = fetch("https://example.com/search?q=shoes")
if page["captcha"]:
    print("captcha found, sitekey:", page["sitekey"])

Le stringhe h-captcha e g-recaptcha sono solo il markup che una pagina usa, quindi questo è un segnale, non una garanzia. Se manca la sitekey, vedi come trovare la sitekey di un captcha.

Risolvilo quando non puoi evitarlo

Quando sulla pagina c'è un widget PopularCaptcha e hai la sua sitekey, puoi richiedere un token all'API di Scarnox con una sola richiesta POST e inviarlo nel campo h-captcha-response. La funzione completa, con la gestione degli errori, è in risolvere un captcha da Python con una sola richiesta. Usa il token subito, perché scade dopo circa due minuti. I dettagli sulla tempistica sono in token captcha scaduto.

Il supporto attivo di Scarnox oggi è PopularCaptcha, in modalità proxyless e con il tuo proxy. reCAPTCHA v2 e v3, Cloudflare Turnstile, GeeTest, AWS WAF e Arkose sono in arrivo. Se il tuo bersaglio usa uno di questi, le guide sui captcha spiegano le opzioni generali, ma non costruire un flusso di produzione su una risoluzione che non è ancora attiva.

Un percorso decisionale per ogni pagina bloccata

Quando lo scraper incontra un captcha, un ordine decisionale semplice mantiene il lavoro corretto e il volume di richieste basso:

  1. Esiste una fonte dati alternativa? Se un'API, un feed o un'esportazione copre i campi che ti servono, passa a quella e smetti di richiedere quella pagina.
  2. **robots.txt consente il percorso?** Se no, saltalo. Non risolvere un captcha su una pagina da cui ti è stato chiesto di stare lontano.
  3. Hai inviato troppo e troppo in fretta? Fai una pausa più lunga, abbassa la frequenza e ricontrolla più tardi. Molti captcha spariscono con un ritmo più lento.
  4. Il captcha è un tipo attivo? Se è PopularCaptcha, si applica la risoluzione di questa guida. Se è un tipo in arrivo, tieni il lavoro in pausa e monitora il rilascio.
  5. È una pagina che sei autorizzato ad automatizzare? Se la risposta non è chiara, chiedi al titolare del sito prima di proseguire.

Il quarto passaggio è quello più spesso saltato. Un solver è utile solo quando il tipo di captcha è supportato, e un lavoro che ritenta un tipo non supportato spreca tempo e richieste.

Gestisci il captcha in un job, non in un ciclo

Metti la risoluzione nel percorso di codice che ha bisogno del token, così il job può registrare ogni captcha, fermarsi quando una pagina continua a fallire e passare oltre. Un ciclo senza limiti che richiede di continuo una pagina captcha è il modo più rapido per far sì che il firewall di un sito blocchi definitivamente il tuo indirizzo.

Monitora ciò che fallisce

Tieni il conteggio delle pagine che restituiscono un captcha, raggruppate per URL e per ora del giorno. Un captcha che compare solo in una sezione di un sito, o solo dopo un certo numero di richieste, ti indica dove sta il fattore scatenante. Questa informazione è più utile di un solver più veloce, perché ti mostra cosa cambiare.

Cosa non fare

Scraping responsabile

Passi successivi