Archive

Posts Tagged ‘crawler’

Un po di link utili

April 6th, 2010 No comments

Un esempio di crawler

October 2nd, 2009 No comments

Ho caricato un progetto di un crawler fatto in c# con visual studio 2008 e sql server 2005 che permette lo scarico e l’analisi di un noto sito italiano di moto. Il progetto per semplicità è diviso in due sotto progetti. Il primo si occupa dello scarico fisico delle pagine html in una cartella, l’altro invece rianalizza tutti i files parsando con le regular expression i campi che mi interessavano salvandoli nel database, inoltre scarica le immagini e le salva nella stessa cartella delle pagine. Per come era stato fatto (agosto 2009) è un po lento. Bisognerebbe spezzarlo in diversi thread per aumentarne la velocità e fare l’analisi delle pagine senza scaricarle, ma non avevo tempo per migliorarlo, spero possa essere utile come esempio.

Esempio Crawler c#

Categories: Informatica Tags:

Costruiamo un crawler – Analizziamo i dati scaricati

August 27th, 2009 No comments

A questo punto con i dati scaricati possiamo analizzare il contenuto html e prelevare quello che ci serve tramite le regular expression:

// Recupero il Genere
string pattern = @"
.*? (?.*?)

";
Match mc = Regex.Match(Page, pattern, RegexOptions.IgnoreCase);

try
{
if (mc.Success)
{
_schedaDb.Genere = mc.Groups["Genere"].Value.ToUpper();
}
}
catch (Exception ex)
{
fileLog.WriteFileLog(String.Format("Errore nel recupero del dato Genere per la scheda: {0}, item: {1}, errore: {2}", _scheda._id, _scheda._nomeitem, ex.Message), true);
}

// Recupero il Produttore
pattern = @"
.*? (?
.*?)

";
mc = Regex.Match(Page, pattern, RegexOptions.IgnoreCase);

try
{
if (mc.Success)
{
_schedaDb.Produttore = mc.Groups["Produttore"].Value.ToUpper();
}
}
catch (Exception ex)
{
fileLog.WriteFileLog(String.Format("Errore nel recupero del dato Produttore per la scheda: {0}, item: {1}, errore: {2}", _scheda._id, _scheda._nomeitem, ex.Message), true);
}

// Recupero il Sviluppatore
pattern = @"
.*? (?.*?)

";
mc = Regex.Match(Page, pattern, RegexOptions.IgnoreCase);

try
{
if (mc.Success)
{
_schedaDb.Sviluppatore = mc.Groups["Sviluppatore"].Value.ToUpper();
}
}
catch (Exception ex)
{
fileLog.WriteFileLog(String.Format("Errore nel recupero del dato Sviluppatore per la scheda: {0}, item: {1}, errore: {2}", _scheda._id, _scheda._nomeitem, ex.Message), true);
}

L’unico problema sono le regular expression da conoscere e testare. Io per questo mi sono basato su un tool scritto da Francesco Balena che trovate qui

Categories: Informatica Tags:

Costruiamo un crawler

August 27th, 2009 No comments

In questo esempio vedremo come costruire un semplice crawler per recuperare i dati da un sito scritto in .net e salvarne le informazioni in un database sql server 2005:

Per prima cosa dobbiamo creare un applicazione console con visual studio 2008 e nel main aggiungere la sezione per il download delle pagine, che poi verranno processate tramite regular expression per ricavarne i dati da salvare nel database:


// Aggancio i filtri
HttpWebRequest req = WebRequest.Create(Utils.ConcatUrls(Settings.Default.Host, Settings.Default.ListSchedePages)) as HttpWebRequest;
// Aggancio gli eventuali cookies
//req.CookieContainer = cookies;
byte[] data = null;

// Passo i dati
StringBuilder sb = new StringBuilder();
sb.Append("__EVENTVALIDATION=");
sb.Append(HttpUtility.UrlEncode("/wEWMQixQE="));
sb.Append("&__VIEWSTATE=");
sb.Append(HttpUtility.UrlEncode("/wEPDmRk"));
sb.Append("&drpGeneri=[All]&drpPeriodo=0&p_corrente=");

int pageNumber = 1;

data = System.Text.Encoding.ASCII.GetBytes(sb.ToString() + pageNumber);

req.Method = "post";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;

// Passo i dati per filtrare
Stream outputStream = req.GetRequestStream();
outputStream.Write(data, 0, data.Length);
outputStream.Close();

// Leggo la risposta
WebResponse response = req.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream, Encoding.Default);
string Page = reader.ReadToEnd();
reader.Close();
responseStream.Close();
response.Close();

In questo caso è da notare che già a questo punto nella stringa Page abbiamo il contenuto della pagina che vogliamo analizzare (registrata nei settings del progetto Settings.Default.Host, Settings.Default.ListSchedePages).

Categories: Informatica Tags:

Parliamo di crawler

August 27th, 2009 No comments

Un crawler (detto anche spider o robot), è un software che analizza i contenuti di una rete (o di un database) in un modo metodico e automatizzato, in genere per conto di un motore di ricerca.

Un crawler è un tipo di bot (programma o script che automatizza delle operazioni). I crawler solitamente acquisiscono una copia testuale di tutti i documenti visitati e le inseriscono in un indice.

Un uso estremamente comune dei crawler è nel Web. Sul Web, il crawler si basa su una lista di URL da visitare fornita dal motore di ricerca (il quale, inizialmente, si basa sugli indirizzi suggeriti dagli utenti o su una lista precompilata dai programmatori stessi). Durante l’analisi di un URL, identifica tutti gli hyperlink 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.

Ecco di seguito una tabella con i nomi degli spider dei principali motori di ricerca

Nome spider 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
googlebot Yahoo

Dati aggiornati al 21/02/2008

Esempi di Web crawlers

La seguente è una lista di architetture pubbliche di crawler di carattere generico:

  • RBSE (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.
  • World Wide Web Worm (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.
  • CobWeb (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 molticrawler 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 sul 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 rilasciato sotto la General Public License (GNU).
  • Wget è un crawler a linea di comando scritto in C e rilasciato sotto 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.
  • ht://Dig 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 offline. È stato scritto in C e rilasciato sotto licenza GNU. Si può trovare presso il sito ufficiale.
  • JSpider è un web spider altamente personalizzabile rilasciato sotto licenza GPL *Larbin
  • Webtools4larbin
  • Methabot È un web crawler ottimizzato per la velocità e con linea di comando scritta in C e rilasciato 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 and 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 il/gli indirizzo/i di partenza per estrarre i dati scaricati e per implementare un motore di ricerca basilare di testo.
  • WIRE – Web Information Retrieval Environment (Baeza-Yates and Castillo, 2002) è un web crawler scritto in C++ e rilasciato 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 per implementare i comportamenti migliori dei bot we distribuita sotto licenza Perl5.
  • Web Crawler web crawler Open source per .NET scritto in C#).
  • Sherlock Holmes 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 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 . È rilasciata sotto licenza GPL e scritto interamente in linguaggio Python.
  • Universal Information Crawler 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.
  • Spider News,informazioni per costruire uno spider in Perl.
  • Squzer, un web crawler open-source, espandibile, multifunzione scritto in Python.
  • Arachnode.NET, 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 e è rilasciato sotto licenza GPL.

Fonte wikipedia

Categories: Informatica Tags: