Navigando in rete ci siamo imbattuti in un articolo molto interessante sul tema del web crawling e del web scarping. S’intitola “5 Tips For Web Scraping Without Getting Blocked or Blacklisted” e illustra una serie di tecniche per sviluppare web crawler senza il rischio di blocco o di ban.

Riportiamo con traduzione in italiano i primi 8 punti, che rispecchiano appieno la nostra idea di web crawling. A ciò aggiungiamo un ultimo punto personalizzato relativo alla fase di log in di un crawler.

Nota Bene

Come saprai, i crawler possono essere utilizzati per scopi buoni o meno buoni, da qui il fatto che spesso non sono visti di buon occhio dai siti web. I nostri web crawler rientrano nella prima categoria: non sono altro che un’automazione di un processo dettato dal cliente. Per policy ed etica in Softfour NON sviluppiamo o diffondiamo informazioni al fine di creare software malevolo o comunque utilizzato per scopi non nobili.

1) Consigli per un web crawling a prova di ban: rotazione IP

I siti web rilevano i web crawler innanzitutto tramite l’analisi del loro indirizzo IP. Per essere al riparo da eventuali ban dunque la maggior parte del web crawler ricorre a un numero variabile di IP. Ma come si fa?

sviluppo web crawling - rotazione IP

Per evitare di inviare tutte le richieste tramite lo stesso indirizzo IP, è possibile utilizzare un server di rotazione IP, o altri servizi proxy che permettono di instradare le richieste attraverso una serie di indirizzi IP differenti. Con questa mossa potrai procedere con il web scraping sulla maggior parte di siti web senza alcun problema.

Per i siti che usano blacklist proxy più avanzate, potrebbe essere necessario utilizzare proxy residenziali o mobili. Come saprai infatti il numero di indirizzi IP nel mondo è fisso, e la stragrande maggioranza delle persone che navigano in rete hanno un solo IP, quello fornito dall’internet provider per la loro connessione domestica. Se invece riesci ad avere 1 milione di indirizzi IP, ciò ti consentirà di navigare come se fossi 1 milione di utenti diversi senza destare sospetti.

2) Imposta uno User Agent reale

Gli User Agent sono una speciale tipologia di intestazione HTTP che indica al sito web oggetto della navigazione quale browser stai esattamente utilizzando. Alcuni siti web esaminano gli User Agent e bloccano le richieste provenienti da un User Agent che non corrisponde a nessuno dei browser principali.

Nella maggior parte dei web scraper non viene impostato alcun User Agent, ed è per questo che vengono facilmente rilevati. Non fare lo stesso errore! Ricordati di impostare uno User Agent reale per il tuo web crawler (qui l’elenco degli User Agent più popolari). Se sei un utente esperto puoi anche impostare il tuo User Agent su Googlebot User Agent, poiché la maggior parte dei siti web desidera essere indicizzato da Google e quindi lasciar passare i Googlebot.

È altresì importante ricordare a ogni aggiornamento di Chrome, Safari, Firefox etc di mantenere aggiornati gli User Agent che utilizzi, poiché per ogni update c’è un User Agent completamente diverso. Questo significa che se non tieni aggiornati i tuoi User Agent, essi diventeranno nel tempo sempre più sospetti.

Un’altra soluzione intelligente potrebbe essere quella di ruotare tra un numero diverso di User Agent, in modo che non ci sia un picco improvviso nelle richieste dallo stesso User Agent a un sito web (anche in questo caso si desterebbero sospetti).

3) Imposta altre intestazioni HTTP

I browser reali hanno un set completo di intestazioni, ognuna delle quali può essere controllata attentamente dai siti web per bloccare il tuo web scraper. Per far sembrare il tuo web scraper un browser reale, clicca qui e semplicemente copia le intestazioni che vedi (sono le intestazioni che sta usando il tuo attuale browser). Chiavi d’intestazione come “Accept”, “Accept-Encoding”, “Accept-Language” faranno sembrare le tue richieste provenienti da un browser vero, riducendo il rischio che il tuo web crawler venga bloccato.

web crawling impostare altre intestazioni HTTP

Ruotando attraverso una serie di indirizzi IP e impostando le intestazioni delle richieste HTTP più appropriate (in particolare gli User Agent), dovresti essere in grado di evitare che il tuo web scraper sia rilevato dal 99% dei siti web.

4) Imposta intervalli causali tra le tue richieste

È molto facile rilevare un web crawler che invia esattamente una richiesta al secondo 24 ore al giorno: nessuna persona reale interagirebbe con un sito web in questo modo.

Per sviluppare un web scraper al riparo da blocchi, ti suggeriamo di impostare ritardi randomizzati (ad esempio tra 2 e 10 secondi). E anche di essere delicato: se invii richieste troppo velocemente puoi far crashare il sito web per tutti. Ti consigliamo perciò di inviare richieste più lentamente, in modo da non sovraccaricare il server.

Per un comportamento ancora più responsabile, controlla i robots del sito (di solito si trovano all’indirizzo http://example.com/robots.txt o http://www.example.com/robots.txt): nel file dovrebbe esserci una riga con indicato il ritardo di scansione, che ti dirà quanti secondi dovresti attendere tra una richiesta e l’altra, così da non causare problemi di traffico pesante al server.

5) Imposta un referrer

L’intestazione Refer è un’intestazione di richiesta http che consente al sito di sapere da dove stai arrivando (un altro sito web, social media, digitazione diretta nel browser, etc). Nel caso del web crawling generalmente è una buona idea impostare il referer per far sembrare che si arrivi da Google, tramite l’intestazione:

“Referer”: “https://www.google.com/”

Puoi cambiare il Refer per siti web in diversi Paesi. Ad esempio se stai cercando di “crawlerare” un sito nel Regno Unito potresti utilizzare “https://www.google.co.uk/” anziché “https: //www.google.com/”.

Impostando questa intestazione la tua richiesta apparirà ancora più autentica, cioè sembrerà che le visite provengano da un sito / motore di ricerca dal quale il webmaster si aspetterebbe molto traffico in una normale situazione di navigazione.

Vediamo ora trucchi avanzati per utenti più esperti.

6) Naviga in modalità Headless (senza interfaccia)

I siti web più difficili da scraperare sono spesso in grado di riconoscere segnali molto sottili come font, estensioni, cookies, esecuzioni javascript e capire se le richieste arrivano da un utente reale o da un bot. Per procedere con un web crawling a prova di ban su questi siti potrebbe essere necessario navigare in modalità Headless, senza interfaccia grafica.

web crawling navigare in modalità headless

Tools come Selenium o Puppeteer ti consentono di scrivere un programma di controllo per un browser reale, identico a quello che userebbe un vero utente. Rendere Selenium o Puppeteer non rilevabili richiede del duro lavoro, ma è anche l’unico modo per scraperare siti che altrimenti ti darebbero del filo da torcere. Nota bene: dovresti usare questi tool solo in caso di web crawling assolutamente necessario, poiché questi browser controllabili a livello di programmazione richiedono una notevole quantità di CPU e memoria, e talvolta possono arrestarsi in modo anomalo. Non è invece necessario utilizzare questi strumenti per la stragrande maggioranza dei siti (dove è sufficiente una semplice richiesta GET). Il nostro consiglio è dunque quello di utilizzare Selenium o Puppeteer solo se vieni bloccato con l’uso di un browser headless.

7) Evita le trappole Honeypot

Molti siti tenteranno di rilevare i crawler inserendo collegamenti invisibili che solo un robot è in grado di seguire. È necessario pertanto controllare che un collegamento abbia impostato tramite CSS le proprietà “display: none” o “visibility: hidden”, e accertare che i link non vengano seguiti. Altrimenti un sito sarà in grado di identificarti come uno scraper programmatico, riconoscere le caratteristiche delle tue richieste e bloccarti facilmente.

Gli Honeypots sono uno dei modi più immediati che i webmaster intelligenti usano per rilevare i crawler, pertanto assicurati di eseguire questo controllo su ogni pagina oggetto del tuo crawling. I webmaster più esperti possono anche semplicemente impostare il colore su bianco (o su qualsiasi colore che corrisponde allo sfondo della pagina), quindi dovresti controllare se il link ha una qualche proprietà impostata tipo “color: #fff;” or “color: #ffffff”, in quanto ciò potrebbe rendere invisibile anche il collegamento.

8) Rileva modifiche al sito web

Molti siti web cambiano layout per varie ragioni, e questo spesso causerà la “rottura” dei web scrapers. Inoltre alcuni siti hanno layout diversi in posizioni impreviste (ad esempio la pagina 1 dei risultati di ricerca potrebbe avere un aspetto diverso rispetto alla pagina 4). È dunque fortemente consigliato rilevare queste modifiche durante lo sviluppo del web crawler e creare un monitoraggio continuo in modo da sapere che il crawler sta ancora funzionando (il conteggio di numero di richieste riuscite per crawler dovrebbe bastare come dato).

Un altro semplice modo per impostare il monitoraggio è scrivere uno unit test per una URL specifica del sito (o una URL per ogni tipologia: ad esempio su un sito di recensioni potresti dover scrivere uno unit test per la pagina dei risultati di ricerca, un altro per la pagina delle recensioni, un altro ancora per la pagina del prodotto principale). In questo modo è possibile verificare la presenza di modifiche usando solo poche richieste ogni 24 ore, senza dover eseguire una ricerca completa.

9) Web crawling efficace: gestisci i log in falliti

Ecco il trucco che abbiamo deciso di aggiungere alla guida: la gestione dei log in falliti di un crawler.

Il crawler si comporta per come è configurato, e se la password sul sito da navigare scade o viene cambiata esso si troverebbe a fare N tentativi di login fallite. Questo aprirebbe un problema, poiché molti siti dopo una serie di tentativi mandano in blocco l’account e dunque bisognerebbe mettersi in contatto con l’assistenza del sito, con tutte le conseguenze del caso (crawler non funzionante per tot tempo, tempistiche lunghe, etc).

La soluzione che proponiamo è di istruire i crawler per riconoscere il primo log in fallito. Un’azione che consentirà di notificare l’evento a chi di dovere e contestualmente di creare un lock (su file o in una tabella di DB) che bloccherà tutte le successive navigazioni. Quando verrà aggiornata la password bisognerà rimuovere il lock temporaneo per far ripartire il servizio.

Hai bisogno di consulenza per lo sviluppo di web crawler? Contattaci subito.