|
Nutch : Indicizzazione Web
Per fare il crawling di tutto il web o anche di una sua piccola percentuale, sarebbero necessari cluster in funzione per varie settimane e un’ingente disponibilità di hardware, tuttavia il meccanismo che Nutch mette a disposizione è di semplice utilizzo e si può applicare anche a domini di alcune decine di migliaia di pagine. Innanzitutto, una breve descrizione dei file creati da Nutch; ci sono due tipi di strutture dati: · db è il database contenente le informazioni sulle pagine visitate dal crawler e sui link. · segments mantiene le pagine scaricate e indicizzate ed è composto da altre entità. fetchlist:contiene le Url che dovranno essere prelevate. fetcher: è un insieme di file con le pagine scaricate. index: è l’indice in formato Lucene. Questa struttura è quella creata durante il processo di crawl, precedentemente visto, che con il metodo per l’intero web dovrà essere costituita passo dopo passo. - Creare le directory db/, segments/ e il database vuoto:
$ mkdir segments $ mkdir db $ $NUTCH_HOME/bin/nutch admin db create - Inserire nel db le URL da scaricare, passando al comando inject un file di testo oppure un file DMOZ (contenente URL suddivise in categorie); tali URL devono rispettare regole simili a quelle viste precedentemente che si trovano nel file $NUTCH_HOME/conf/regex-urlfilter.txt:
$ $NUTCH_HOME/bin/nutch inject db –urlfile url - Con le informazioni inserite nel db, generare la lista delle pagine da scaricare (fetchlist):
$ $NUTCH_HOME/bin/nutch generate db segments - In seguito, scaricare le pagine e aggiornare il database con tali informazioni; è utile dichiarare una variabile d’ambiente seg1 con il nome della sottodirectory di segments creata dalla generate:
$ seg1=`ls -d segments/2* | tail -1` $ $NUTCH_HOME/bin/nutch fetch $seg1 $ $NUTCH_HOME/bin/nutch updatedb db $seg1 - Per continuare in profondità il crawling, Nutch inserisce un meccanismo molto funzionale di analisi dei link finora acceduti; praticamente con il comando analyze vengono ordinati i successivi link da prelevare in base alla loro importanza, intesa come numero di link in ingresso in rapporto a quelli in uscita (tipo PageRank):
$ $NUTCH_HOME/bin/nutch analyze db 3 Generare la fetchlist come al passo 3), ma con la selezione di un sottoinsieme di URL, ordinate dal precedente processo di analisi. $ $NUTCH_HOME/bin/nutch generate db segments -topN 20 Scaricare nuovamente le pagine e aggiornare il database: $ seg2=`ls -d segments/2* | tail -1` $ $NUTCH_HOME/bin/nutch fetch $seg2 $ $NUTCH_HOME/bin/nutch updatedb db $seg2 Ripetere il passo 5) tante volte, in base alla profondità che si vuole dare allo spidering. Per ogni iterazione si deve dichiarare una nuova variabile d’ambiente. - Dopodiché costruire l’indice, ripetendo per ogni variabile d’ambiente dichiarata (contenente una sottodirectory di segments):
$ $NUTCH_HOME/bin/nutch index $seg1 .... $$NUTCH_HOME/bin/nutch index $segN - Infine, Nutch ha un ottimo meccanismo d’eliminazione dei duplicati utilizzando la funzione hash MD5 per ogni URL; in altre parole, quelle che creano uno stesso risultato dopo l’applicazione di tale funzione sono pagine duplicate.
$ $NUTCH_HOME/bin/nutch dedup segments duplicati.tmp.
|