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.