Costruiamo un Crawler in C#
Scritto da Gianjey | 8 luglio, 2010 23:40
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.
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.
Questo è quello che dice la teoria (wikipedia). Ora poniamoci il problema di dover costruire un crawler partendo dall’analisi del nostro problema.
Perchè ho bisogno di un crawler?
Perchè ho la necessità di reperire dei dati dalla rete, scaricarli e catalogarli per un ulteriore utilizzo.
Perchè non avvalersi di programmi già pronti?
Perchè devo scaricare i dati in modo dettagliato e di solito i programmi che si trovano in giro servono per lo più a scaricare pagine dato un insieme di link.
Cosa mi serve per costruire un crawler?
Prima di tutto la conoscenza dell’Html, poi di un linguaggio di programmazione, le regular expression, e un po di sql per effettuare la scrittura dei dati sul database.
Cosa userò?
Nel mio caso uso l’ambiente di sviluppo della Microsoft, Visual Studio 2010, il linguaggio c# e un database sql server express 2005.
Bene ora che abbiamo un pò chiarito passiamo più nello specifico. Supponiamo di voler crawlerizzare un blog ad esempio, perchè voglio scaricare tutti i post le immagini e salvarli in un db.
Per prima cosa analizzo come è strutturata la navigazione delle pagine del blog.
Guardo come funziona la navigazione, i link hai dettagli, le immagini.
Insomma analizzo ciò che voglio scaricare. Una volta fatto questo posso procedere nel costruire la base dati, con tutti i campi necessari.
Quando ho realizzato il database e sono sicuro di aver preso in considerazione tutti i dati necessari, passo alla fase due, creo una applicazione console in c#.
Ok ed ora come procedo?
Be qui direi prima di capire come far a scaricare l’html del blog da programma. Niente di più semplice.
HttpWebRequest req = WebRequest.Create("http://www.nomeblog.it") as HttpWebRequest;
req.Method = "post";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = 0;
// Leggo la risposta
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
Encoding respEncoding = Encoding.GetEncoding(response.CharacterSet);
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream, respEncoding);
string Page = reader.ReadToEnd();
reader.Close();
responseStream.Close();
response.Close();
Cosa abbiamo fatto?. Abbiamo creato un oggetto HttpWebRequest al quale abbiamo aggiunto le informazioni per il post della pagina al server (Method,ContentType e ContentLength in questo caso 0 perchè non ho parametri faccio solo un post).
Dopo andiamo a leggere la risposta del server con l’oggetto HttpWebResponse settandogli il giusto encoding della pagina (questo per evitarci problemi di codifica dei caratteri). Infine riempiamo uno stream con il metodo GetResponseStream e mettiamo tutto nel contenuto di una stringa (Page), poi chiudiamo lo stream ed il resto.
Bene ora nella variabile Page abbiamo tutto il contenuto html della pagina del nostro blog da analizzare, ma questo lo vedremo nel prossimo articolo, a presto…
Articoli correlati
Tags: bot c#, c# crawler, come costruire un crawler, come costruire un crawler c#, come costruire un robot c#, come costruire uno spider, come fare un crawler c#, cralwer c#, crawler, crawler web, crawler web c#, creare un crawler, creare un web crawler, creare un webcrawler, creare un webspider, creare uno spider, how to crawler, how to robot, how to spider, how to write a crawler, Informazioni sui crawler, robot c#, spider, spider c#, web crawler, web crawler c#, Web Search, webcrawler, WebSearch, webspider, write a web crawler

