# Crawler

Un crawler (detto anche web crawler, spider o robot), è un software con cui di solito un motore di ricerca analizza i contenuti di una rete (o di un database) in un modo metodico e automatizzato. Nello specifico, un crawler è un tipo di bot (programma o script che automatizza delle operazioni), che solitamente acquisisce una copia testuale di tutti i documenti presenti in una o più pagine web creando un indice che ne permetta, successivamente, la ricerca e la visualizzazione.
Un uso estremamente comune dei crawler viene effettuato sul Web; esso si basa su una lista di URL da visitare fornita dal motore di ricerca (il quale, inizialmente, si basa a sua volta sugli indirizzi suggeriti dagli utenti o su una lista precompilata dai programmatori stessi). Durante l'analisi di una URL, identifica tutti i collegamenti ipertestuali presenti nel documento e li aggiunge alla lista di URL da visitare. Il processo può essere concluso manualmente o dopo che un determinato numero di collegamenti è stato seguito.
Inoltre i crawler attivi su Internet hanno la facoltà di essere indirizzati da quanto indicato nel file "robots.txt" posto nella root del sito. All'interno di questo file, è possibile indicare quali pagine non dovrebbero essere analizzate. Il crawler ha la facoltà di seguire i consigli, ma non l'obbligo.
Nomi degli spider dei principali motori di ricerca, aggiornati al 21 febbraio 2008 :
| Crawler | Motore di ricerca |
| Googlebot | Google |
| Fast | Fast - Alltheweb |
| Slurp | Inktomi - Yahoo! |
| Scooter | AltaVista |
| Mercator | AltaVista |
| Ask Jeeves | Ask Jeeves |
| Teoma agent | Teoma |
| Ia archiver | Alexa - Internet Archive |
| Yahoo! Slurp | Yahoo |
| Romilda | Facebook |
| DuckDuckBot | DuckDuckGo |

## Esempi di Web crawlers

La seguente è una lista di architetture pubbliche di crawler di carattere generico:
* Bucean (Eichmann, 1994) è stato il primo crawler pubblico. È basato su due programmi: il primo, "spider" mantiene la richiesta in un database relazionale, e il secondo "mite", è un browser www ASCII che scarica le pagine dal web.
* WebCrawler (Pinkerton, 1994) è stato usato per costruire il primo indice testuale di pubblicità di un ramo del web. Era basato su lib-WWW per scaricare le pagine, e un altro programma per analizzare e ordinare URL per esplorazione tramite metodo grafico breadth-first. Include anche un crawler in tempo reale che segue i collegamenti basati sulle similarità del testo-ancora con la query condizionale.
* TennSpider (McBryan, 1994) era un crawler usato per costruire un semplice indice di titoli di documento e URL. L'indice poteva essere cercato usando il comando grep Unix.
* Google Crawler (Brin and Page, 1998) è descritto in alcuni dettagli, ma il riferimento è solo su una precedente versione di quell'architettura, la quale è basata su C++ e Python. Il crawler fu integrato col processo di indicizzazione, perché la selezione del testo fu fatta per indicizzare completamente il testo e anche per l'estrazione degli URL. Un server URL invia liste di URL per essere prelevato da diversi processi di crawling. Durante il parsing, gli URL trovati sono inviati a un server URL che controlla se l'URL è stato visto precedentemente. Se no, l'URL è aggiunto all'interrogazione del server URL.
* VnzOwna (da Silva et al., 1999) usato come schedulatore centrale e serie di collettori distribuiti. I collettori parsificano le pagine web scaricate e inviano gli URL scoperti allo schedulatore, il quale assegna il turno ai collettori. Lo schedulatore rinforza la ricerca ordinata breadth-first con una politica senza ordine per evitare il sovraccarico dei server web. Il crawler è scritto in Perl.
* Mercator (Heydon and Najork, 1999; Najork and Heydon, 2001) è un web crawler modulare distribuito e scritto in Java. La sua modularità sorge dall'uso di "moduli di protocollo" intercambiabili e "modelli di processo". I moduli di protocollo sono correlati per acquisire le pagine web (es: HTTP), e i moduli di processo sono correlati per processare le pagine web. I moduli standard possono essere usati per indicizzare il testo delle pagine, o per raccogliere statistiche dal Web.
* WebFountain (Edwards et al., 2001) è un crawler simile a Mercator ma scritto in C++. La sua particolarità sta nella "controller machine" che coordina una serie di "macchine-formiche". Dopo un ripetitivo scarico di pagine, un fattore di cambio è calcolato per ogni pagina e un metodo di programmazione non lineare deve essere usato per risolvere il sistema di equazione per massimizzare l'aggiornamento. Gli autori raccomandano di usare questo ordine di crawling nelle prime parti, e poi scambiare l'ordine uniforme nel quale tutte le pagine sono state visitate con la stessa frequenza.
* PolyBot [Shkapenyuk and Suel, 2002] è un crawler scritto in C++ e Python, composto da un manager, uno o più downloader e uno o più rilevatori DNS. Gli URL collezionati sono aggiunti su disco e processati più tardi per cercarli in modalità batch. La regolamentazione considera entrambi domini di terzi e secondi livelli (es di terzo: www.aaa.com, www2.aaa.com) perché i domini di terzo livello sono solitamente ospitati dallo stesso webserver.
* WebRACE (Zeinalipour-Yazti and Dikaiakos, 2002) è un modulo sviluppato in Java di crawling e caching, e usato come parte di un sistema più generico chiamato eRACE. La maggior funzionalità che spicca in Webrace è che, mentre molti crawler iniziano a cercare con un set di semi URL, WebRACE riceve continuamente nuovi URL dal form.
* Ubicrawler (Boldi et al., 2004) è un crawler scritto in Java. È composto da un numero di 'agenti' identici e la funzione di assegnamento è calcolata usando l'hashing dei nomi di host. Non c'è overlap, questo significa che nessuna pagina è indicizzata due volte, fino a quando un agente crawler non crasha; raggiunge alta scalabilità ed è tollerante ai fallimenti.
* FAST Crawler (Risvik and Michelsen, 2002) è un crawler usato dai Fast Search & Transfer.
* Labrador,un crawler privato che collabora con il progetto Open Source chiamato Terrier Search Engine.
* Spinn3r, è un crawler usato per costruire l'anima di Tailrank.com. Spinn3r è basato su Java e la maggior parte dell'architettura è Open Source.
* HotCrawler, è scritto in C e PHP.

### Crawler di tipo open-source

* DataparkSearch è un crawler e motore di ricerca distribuito sotto la GNU General Public License.
* Ebot è un crawler scalabile e distribuito scritto in Erlang e distribuito sotto la GNU General Public License.
* Wget è un crawler a riga di comando scritto in C e distribuito sotto la GNU General Public License. È tipicamente usato per siti mirror e FTP.
* Heritrix è il crawler di maggior qualità di estrazione dagli archivi web, studiato per archiviare periodici screenshot di una larga porzione del web. È stato scritto in Java.
* Htdig include un crawler web nel suo motore di indicizzazione.
* HTTrack usa un web crawler per creare una replica di un sito web per la consultazione off-line. È stato scritto in C e distribuito sotto licenza GNU GPL.
* JSpider è un web spider altamente personalizzabile distribuito sotto licenza GNU GPL.
* Methabot è un web crawler ottimizzato per la velocità e a riga di comando scritta in C e distribuito sotto licenza ISC. Comprende un sistema di configurazione, un modulo di sistema e supporto per obiettivi di crawling attraverso il file system locale, HTTP o FTP.
* Nutch è un crawler scritto in Java sotto licenza Apache. Può essere usato assieme all'indice testuale creato con Lucene.
* WebVac è un crawler usato dal Stanford WebBase Project.
* WebSPHINX (Miller e Bharat, 1998) è composto da una libreria Java che implementa la query multipla delle pagine web e il parsing HTML, un'interfaccia utente grafica per impostare gli indirizzi di partenza per estrarre i dati scaricati e per implementare un motore di ricerca basilare di testo.
* WIRE - Web Information Retrieval Environment (Baeza-Yates e Castillo, 2002) è un web crawler scritto in C++ e distribuito sotto licenza GPL, inclusi diverse linee di condotta per catalogare le pagine web scaricate e un modulo per generare statistiche e rapporti sulle pagine scaricate, usato per la caratterizzazione web.
* LWP::RobotUA (Langheinrich, 2004) è una classe Perl distribuita sotto licenza Perl5.
* Web Crawler è web crawler open source per .NET scritto in C#.
* Sherlock Holmes raccoglie e indicizza dati testuali (file di testo, pagine web, ecc.), sia localmente che nella rete. Holmes è sponsorizzato e usato commercialmente dal portale web ceco Centrum. è usato inoltre dal sito Onet.pl.
* YaCy è un motore di ricerca liberamente distribuito, costruito sui principi dei network di p2p (sotto licenza GPL).
* Ruya è open source ad alte prestazioni basato sulla ricerca Breadth-first, crawler di livello base. È usato per gestire siti web inglesi e giapponesi nel miglior modo possibile. È distribuita sotto licenza GPL e scritto interamente in linguaggio Python.
* Universal Information Crawler è un web crawler di uso veloce. Salva e analizza i dati.
* Agent Kernel è una struttura Java per pianificare, trattare e stoccare i dati durante il crawling.
* Squzer, un web crawler open-source, espandibile, multifunzione scritto in Python.
* Arachnode.NET è un web crawler open source promiscuo per scaricare, indicizzare e salvare contenuti Internet incluse e-mail, file, hyperlink, immagini e pagine web. Arachnode.net è scritto in C# usando SQL Server 2005 ed è distribuito sotto licenza GPL.
* BBragnet è un web crawler open source (per server Linux) scritto in PHP.
* Scrapy è un web crawler open source scritto in Python.

## Critiche

Il termine Web Crawler viene utilizzato anche per indicare i controversi offline browser, come: PageNest (ex WebStripper), MSIECrawler, Offline Explorer, ecc. Questi programmi sono concepiti per scaricare sul disco fisso del computer dell'utente il contenuto di un intero sito web. Ad esempio, Memory Alpha ne vieta l'utilizzo perché accedono al sito in modo aggressivo, rallentando drasticamente la fruizione del sito stesso da parte degli altri utenti ed i trasgressori rischiano di essere bloccati.