Salta al contenuto

403 Proibito: il flagello dei web scraper (e come evitarlo)

Se hai mai provato a recuperare dati da siti Web, quasi sicuramente ti sei imbattuto nel temuto errore "403 Forbidden". Questo codice di stato HTTP indica che il server ha compreso la tua richiesta, ma si rifiuta di soddisfarla. In altre parole, non hai l'autorizzazione per accedere alla risorsa che hai richiesto.

Per i web scraper, gli errori 403 sono un mal di testa costante. I siti Web li utilizzano per impedire l'accesso non autorizzato alle pagine e per bloccare il traffico che sembra provenire da bot o scraper anziché da utenti umani. Ottenere una risposta 403 può portare il tuo progetto di web scraping a una brusca frenata.

Ma non disperare! Sebbene gli errori 403 possano essere frustranti, non sono insormontabili. Con le giuste tecniche, è possibile evitare l'attivazione di 403 e mantenere il tuo web scraper funzionante senza intoppi. In questa guida approfondiremo le cause degli errori 403 ed esploreremo le strategie per prevenirli. Iniziamo!

Perché i Web Scraper riscontrano errori 403

Esistono alcuni motivi principali per cui un web scraper potrebbe ricevere una risposta 403 Proibito da un sito Web:

  1. Richiesta di una risorsa limitata: Alcune pagine sono semplicemente vietate agli utenti non autorizzati. Ad esempio, provare ad accedere a una pagina che richiede l'accesso, come una dashboard utente, spesso risulterà in un errore 403 se non si dispone di una sessione valida.

  2. Autenticazione mancante: molti siti Web richiedono una qualche forma di autenticazione, ad esempio l'accesso con nome utente e password, per accedere a determinate pagine. Se il tuo web scraper non fornisce le credenziali di autenticazione necessarie, probabilmente riceverà una risposta 403.

  3. Rilevamento di bot: i siti Web spesso utilizzano varie tecniche per rilevare e bloccare il traffico che sembra provenire da bot o scraper. Se un sito ritiene che il tuo web scraper sia uno strumento automatizzato anziché un utente umano, potrebbe rispondere con un errore 403.

  4. Sistemi anti-bot: alcuni siti Web utilizzano soluzioni anti-bot dedicate come Cloudflare, Imperva o PerimeterX per proteggersi dallo scraping e da altre minacce automatizzate. Questi sistemi analizzano i modelli di traffico e bloccano le richieste che sembrano sospette, spesso restituendo errori 403.

Per raschiare con successo i siti Web, abbiamo bisogno di modi per evitare questi problemi e convincere i siti che il nostro web scraper è un utente legittimo e autorizzato. Fortunatamente, ci sono diversi approcci che possiamo adottare. Diamo un'occhiata ad alcune delle tattiche più efficaci.

Fornire l'autenticazione

Se un sito web richiede l'accesso per accedere al contenuto che desideri raschiare, dovrai includere l'autenticazione nel processo di raschiamento web. Ciò comporta in genere due passaggi:

  1. Ispezione del processo di accesso: utilizza gli strumenti di sviluppo del tuo browser per osservare il traffico di rete quando accedi manualmente al sito. Cerca la richiesta che invia le credenziali di accesso e prendi nota dell'URL, del metodo della richiesta, delle intestazioni e del corpo della richiesta. Dovrai replicare questa richiesta nel tuo web scraper.

  2. Accesso a livello di codice: utilizza una libreria come Requests di Python o Axios di Node.js per inviare una richiesta di accesso imitando quella che hai osservato. Cattura tutti i cookie restituiti dal sito, poiché spesso contengono token di sessione necessari per autenticare le richieste successive. Includi questi cookie nelle intestazioni delle tue richieste di web scraping per mantenere una sessione di accesso valida.

Ecco un esempio di accesso programmatico a un sito utilizzando Python e Requests:

import requests

# Start a new session
session = requests.Session() 

# Send a POST request to the login URL with the necessary credentials
login_data = {
    ‘username‘: ‘my_username‘,
    ‘password‘: ‘my_password‘,
}
response = session.post(‘https://example.com/login‘, data=login_data)

# The session now contains the cookies needed to authenticate future requests
response = session.get(‘https://example.com/restricted_page‘)

Autenticando il tuo web scraper e includendo i cookie e le intestazioni necessari nelle tue richieste, puoi evitare errori 403 causati da autorizzazioni mancanti.

Tecniche invisibili

Naturalmente il login non è sempre sufficiente. I siti web sono impegnati in un costante gioco del gatto col topo con i web scraper, alla ricerca di segnali che distinguano i bot dagli utenti umani. Per evitare di essere bloccati, i web scraper devono mimetizzarsi imitando il più fedelmente possibile il comportamento umano.

Alcune tecniche stealth chiave includono:

  • Agenti utente a rotazione: L'agente utente è una stringa che identifica il client che effettua una richiesta. L'utilizzo dello stesso user agent per tutte le richieste è un chiaro indizio del fatto che il traffico proviene da un bot. Mantieni invece un pool di stringhe dell'agente utente e selezionane casualmente una diversa per ogni richiesta.

  • Indirizzi IP a rotazione: L'invio di un volume elevato di richieste da un singolo indirizzo IP è un altro campanello d'allarme per i sistemi di rilevamento dei bot. Utilizza un servizio proxy per instradare le richieste attraverso una varietà di indirizzi IP. Per ottenere i migliori risultati, scegli un provider che offra un ampio pool di IP residenziali.

  • Randomizzazione dei modelli di richiesta: Gli esseri umani non navigano nei siti web in modo perfettamente regolare. Fanno pause, cambiano le pagine in modo irregolare e variano il tempo tra le richieste. Introduci ritardi casuali tra le tue richieste di web scraping ed evita di eseguire la scansione dei siti secondo uno schema perfettamente prevedibile.

  • Gestione dei CAPTCHA: alcuni siti Web presenteranno CAPTCHA quando sospettano l'attività dei bot. I CAPTCHA possono essere difficili da risolvere automaticamente per i web scraper. Se li incontri frequentemente, potresti dover utilizzare un servizio di risoluzione CAPTCHA che utilizza lavoratori umani per completare le sfide per conto del tuo raschietto.

Ecco un esempio di una richiesta più furtiva in Python che utilizza un agente utente casuale e ritardi:

import requests
import random
import time

# List of user agent strings
user_agents = [    
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36‘,  
]

# Randomize user agent 
headers = {‘User-Agent‘: random.choice(user_agents)}

# Introduce a random delay of 1-5 seconds
time.sleep(random.randint(1, 5))

# Send the request
response = requests.get(‘https://example.com‘, headers=headers)

Adottando misure per rendere il traffico del tuo web scraper il più "umano" possibile, puoi ridurre significativamente il rischio di incontrare errori 403 e altri ostacoli.

Automazione non rilevabile

Per il web scraping più furtivo possibile, potresti voler utilizzare uno strumento di automazione completo del browser come Puppeteer o Playwright. Questi strumenti eseguono un browser reale (Chrome o Firefox) a livello di codice, consentendoti di interagire con i siti Web in un modo che è molto difficile da distinguere dagli utenti umani reali.

Gli strumenti di automazione del browser possono essere configurati per la massima invisibilità. Ad esempio, puoi impostarli per bloccare il codice di impronta digitale JavaScript, mascherare i segni rivelatori dell'automazione negli oggetti Navigator e randomizzare le dimensioni del viewport. Controllando un browser reale, ottieni anche la gestione automatica di cookie, intestazioni, reindirizzamenti e altri aspetti di HTTP che le librerie di web scraping di base non gestiscono per te.

Lo svantaggio dell'automazione del browser è che richiede più risorse ed è più lento rispetto all'invio di semplici richieste HTTP con una libreria come Requests o Axios. Tuttavia, il compromesso in termini di prestazioni potrebbe valerne la pena per i siti particolarmente aggressivi nel bloccare gli scraper.

Ecco un esempio di base dell'utilizzo di Puppeteer in Node.js per visitare una pagina in Chrome headless:

const puppeteer = require(‘puppeteer‘);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Configure the browser for stealth (omitted for brevity)

  await page.goto(‘https://example.com‘);

  // Scrape data from the page...

  await browser.close();
})();

Con qualche configurazione aggiuntiva, strumenti come Puppeteer possono essere un modo efficace per automatizzare lo scraping evitando il rilevamento.

Conclusione

Incontrare errori 403 è una parte inevitabile del web scraping, ma con il giusto approccio non devono far deragliare i tuoi progetti. Comprendendo il motivo per cui si verificano gli attacchi 403 e adottando misure per evitare che si attivino, tramite autenticazione, tecniche invisibili e automazione non rilevabile, puoi mantenere il tuo web scraper funzionante senza intoppi.

L'approccio più efficace varierà a seconda dei siti Web specifici a cui ti rivolgi. Alcuni potrebbero richiedere solo semplici intestazioni di richiesta per evitare 403, mentre altri potrebbero richiedere una configurazione completa dell'automazione del browser. La chiave è iniziare con tecniche di base e aggiungere livelli più sofisticati di azione furtiva secondo necessità in base agli ostacoli che incontri.

Se la sfida in continua evoluzione di evitare i 403 e altre misure anti-scraping sembra scoraggiante, potresti prendere in considerazione l'utilizzo di un'API di web scraping standardizzata piuttosto che costruire e mantenere la tua infrastruttura di scraping. Servizi come ScrapingBee e ScraperAPI offrono scraper testati sul campo con prevenzione 403 integrata che possono farti risparmiare notevole tempo di sviluppo.

Sia che tu scelga di installare il tuo web scraper o di utilizzare una soluzione predefinita, l'importante è non lasciare che gli errori 403 ti impediscano di ottenere i dati di cui hai bisogno. Con un po' di tenacia e gli strumenti giusti nel tuo kit, puoi mantenere in funzione il tuo web scraper nonostante qualsiasi contromisura anti-bot. Buon raschiamento!

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *