Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoNiccolò Abate Modificato 10 anni fa
1
Crawling Ida Mele Sapienza Università di Roma Ilaria Bordino Ida Mele
2
Software open source costruito al top di Jakarta Lucene.
Nutch Framework Apache per la costruzione di crawler scalabili e applicazioni per Web Search. Software open source costruito al top di Jakarta Lucene. URL: Disponibile gratuitamente presso: Crawling
3
Java API per lo sviluppo di motori di ricerca testuali.
Jakarta Lucene Java API per lo sviluppo di motori di ricerca testuali. Non applicazione, ma API che consente la realizzazione di search applications customizzate in base alle specifiche esigenze degli sviluppatori. Grande comunità di sviluppatori. Tecnologia usata nello sviluppo di molti siti e applicazioni web (furl, zoe, jira, lookout). URL: Crawling
4
Lucene: principali caratteristiche
Indicizzazione scalabile e performante. Algoritmi per la Search potenti, accurati ed efficienti. Include supporto per: ranked searching, fielded searching, wildcard queries, phrase queries, proximity queries, range queries and more. Ricerca su molteplici indici con merging dei risultati. Permette esecuzione simultanea di update e search. Cross platform solution: 100% java, disponibile come software open source. Crawling
5
Giovane progetto open source.
Nutch Giovane progetto open source. Software per lo sviluppo di applicazioni per Web Search. Non è un sito di ricerca, ma intende essere un mezzo per potenziare molti siti di ricerca. Non è un progetto di ricerca, ma intende essere un supporto per la ricerca. Obiettivi: incrementare la disponibilità di tecnologie per Web Search; aumentare la trasparenza nella Web search. Crawling
6
Nutch: Obiettivi tecnici
Scalare all’intero Web: milioni di server differenti, miliardi di pagine, il completamento di un crawl richiede settimane, c’è molto rumore nei dati. Supporto per traffico elevato (migliaia di ricerche al secondo). Qualità paragonabile allo stato dell’arte per la search. Crawling
7
Nutch: Architettura Crawling
8
Input: un set di pagine html.
Nutch: motore di ricerca configurabile dall'utente Permette la raccolta delle pagine, l’indicizzazione e l’interrogazione delle pagine web. Input: un set di pagine html. Output: motore di ricerca sulle pagine raccolte. Uso: raccolta di pagine e ricerca sulla collezione indicizzata. Crawling
9
Download: http://www.apache.org/dyn/closer.cgi/nutch/
Nutch: download Download: Scaricare una delle ultime release. Tutorial: Presentazione generale del codice: Crawling 9
10
Nutch: configurazione
A partire da Nutch 0.9 è richiesta Sun JDK 1.5 o superiore: Tomcat di Apache 5.x: Almeno un GigaByte su disco. Connessione Internet veloce. Tempo :-) Crawling
11
Nutch: configurazione (2)
Inizializzare NUTCH_JAVA_HOME con la directory radice di Java: LINUX: edit .bashrc per inserire: export NUTCH_JAVA_HOME=/usr/local/lib/... MAC OS: export NUTCH_JAVA_HOME=/Library/Java/Home Aggiungere NUTCH/bin al PATH (N.B. NUTCH rappresenta la directory radice di nutch): edit .bashrc per inserire: export PATH=$PATH:NUTCH/bin (x la release 1.1) export PATH=$PATH:NUTCH/runtime/local/bin (x la release 1.4) Nota: devono sempre essere controllate e impostazioni locali della vostra macchina. Riavviate il terminale dopo le modifiche, infine se necessario modificate i permessi di nutch. Crawling
12
Nutch: configurazione (3)
Nelle nuove versioni di nutch è necessario configurare alcuni parametri come l’identificatore dello user-agent. Editare il file conf/nutch-default.xml settando alcune proprietà minimali: <property> <name>http.agent.name</name> <value>...</value> <description> HTTP 'User-Agent' request header. MUST NOT be empty - please set this to a single word uniquely related to your organization. </description> </property> Crawling
13
Nutch: configurazione (4)
Si possono anche configurare altre proprietà. Contenuto del file /conf/nutch-default.xml: NOTE: You should also check other related properties: http.robots.agents http.agent.description http.agent.url http.agent. http.agent.version and set their values appropriately. Crawling
14
Nutch: configurazione (5)
<property><name>http.agent.description</name> <value></value><description>Further description of our bot- this text is used in the User-Agent header. It appears in parenthesis after the agent name. </description></property><property> <name>http.agent.url</name> <value></value> <description>A URL to advertise in the User-Agent header. This will appear in parenthesis after the agent name. Custom dictates that this should be a URL of a page explaining the purpose and behavior of this crawler. </description></property><property> <name>http.agent. </name> <value></value> <description>An address to advertise in the HTTP 'From' request header and User-Agent header. A good practice is to mangle this address (e.g. 'info at example dot com') to avoid spamming. </description></property> Crawling
15
Crawlare il Web con Nutch
Nutch è stato progettato per la gestione di crawl su larga scala, che siano eseguiti in un sistema distribuito e che possono richiedere molto tempo (settimane) per il completamento. I dati raccolti sono organizzati nel modo seguente: crawldb: database del crawl. Contiene info su ogni url nota a nutch, incluso se e quando è stato fatto il fetching; linkdb: database dei link. Contiene inlink noti a tutte le url raccolte, riportando url sorgente e anchor text; segments: un insieme di segmenti; un segmento è un insieme di URL considerate come un’unità durante il fetching; indexes: indici nel formato supportato da Lucene. Crawling
16
Crawlare il Web con Nutch
Un segmento è una directory che contiene le seguenti sottodirectory: - crawl_generate: contiene l'elenco delle URL di cui bisogna fare il fetching; - crawl_fetch: contiene lo stato di fetching di ogni URL; - content: mantiene il contenuto associato a ogni URL; - parse_text: contiene il testo estratto con il parsing da ogni URL; - parse_data: contiene outlink e metadata estratti con il parsing; - crawl_parse: contiene gli outlink, usati per aggiornare crawldb. Crawling
17
Nutch: due approcci al crawling
Intranet crawling: si utilizza comando crawl. Scelta appropriata se si vuole effettuare un crawl di dimensioni limitate, fino a 1M pagine. Whole-Web crawling: da utilizzare per crawl molto estesi, che abbiano bisogno di una quantità notevole di tempo e di risorse computazionali. Si utilizzano comandi a più basso livello come ad esempio: admin db -create, inject, generate, fetch, updatedb per avere un maggiore controllo e/o per fare update dei dati esistenti. Crawling
18
Raccolta delle pagine del DIS
Creare nella directory radice di nutch il file urls e inserire la url della home page del sito di cui si vuole fare crawling: Es: Modificare il file conf/crawl-urlfilter.txt (x la release 1.1) conf/automaton-urlfilter.txt (x la release 1.4) per personalizzare la raccolta. Aggiungere: +^ per limitare la raccolta alle pagine al dominio: dis.uniroma1.it. Eventualmente eliminare (rimuovere o commentare) la riga: Crawling
19
Raccolta delle pagine: crawl
Lista di alcuni parametri: <urlDir>: root directory con le url; [-dir d]: directory dove saranno memorizzati i risultati della raccolta; [-threads n]: numero di threads eseguiti in parallelo; [-depth i]: profondità dei path a partire dalla pagina radice. Crawling delle pagine del DIS: nutch crawl urls -dir mycrawl –depth 5 >& mycrawl.log NON ESEGUIRE A LEZIONE!!! Crawling 19
20
Interrogazione del DB: readdb
Usage: CrawlDbReader <crawldb> (-stats | -dump <out_dir> | -topN <nnnn> <out_dir> [<min>] | -url <url>) <crawldb>: nome della directory contenente il crawldb; -stats[-sort]: stampa le statistiche su System.out. -sort stampa ordinato per host; -dump<out_dir>[format normal|csv]: effettua il dump dell'intero database in out_dir. Il dump è in formato standard con -format normal (default), è in formato csv (valori separati da virgole) con -format csv. -topN <nnnn><out_dir> [min]: effettua il dump in out_dir delle prime nnnn urls ordinate per score. Si possono saltare i record il cui lo score è inferiore ad un valore minimo indicato in min. -url <url>: stampa informazioni riguardanti url su System.out. Crawling 20
21
Interrogazione del DB: readdb (2)
Dopo aver eseguito un crawl possiamo stampare statistiche, o fare il dump dell'intero database. ll comando: nutch readdb mycrawl/crawldb -stats > stats.txt stampa statistiche come ad esempio: il numero di urls, il punteggio min, max e medio delle pagine, ecc. Il comando: nutch readdb mycrawl/crawldb -dump mydump crea il dump del database. Per ogni pagina abbiamo informazioni quali: data e ora in cui si è fatto il fetch, data e ora della modifica, numero di retries, intervallo di retry, score, ecc. more mydump/part Crawling
22
Interrogazione del DB: readlinkdb
Usage: LinkDbReader <linkdb> (-dump <out_dir> | -url <url>) <linkdb>: nome della directory contenente il linkdb; -dump<out_dir>: effettua il dump dell'intero database di link in out_dir. -url <url>: stampa informazioni riguardanti url su System.out. Crawling 22
23
Interrogazione del DB: readlinkdb (2)
Dopo aver eseguito un crawl possiamo analizzare la struttura degli hyperlink della collezione raccolta. Il comando: nutch readlinkdb mycrawl/linkdb/ -dump mylinks crea una directory chiamata mylinks che conterrà informazioni sugli inlink delle URL create in semplice formato testuale. more mylinks/part Con egrep -v $'^$' mylinks/part >inlinks.txt si crea un file con i link entranti. Crawling
24
Estrazione degli outlink: readseg
Il database linkdb fornisce informazioni relavimente ai soli link entranti. Per estrarre gli outlink dai dati raccolti dobbiamo leggere i segmenti. Usiamo il comando readseg: Usage: SegmentReader (-dump ... | -list ... | -get ...) [general options] -dump <segment_dir> <output> [general options]: effettua il dump dei segmenti presenti nella directory segment_dir nel file di testo <output>. Le opzioni sono: - nocontent, -nofetch, -nogenerate, -noparse, - noparsedata, -noparsetext. -list ...: stampa su System.out il contenuto di più segmenti. -get ...: stampa su System.out il contento di un segmento. Crawling
25
Estrazione degli outlink: mergesegs
Dato che si vuole estrarre gli outllink da un unico segmento globale, ottenuto unendo i vari segmenti. Usiamo il comando mergesegs: Usage: SegmentMerger output_dir (-dir segments | seg1 seg2...) [-filter][-slice NNNN] output_dir: directory che conterrà il/i pezzo/i di segmento d'output; -dir segments: directory contente i vari segmenti; seg1 seg2 ...: lista di directory con i segmenti; -filter: elimina le URLs proibite nel URLFilter. -slice NNNN: crea più segmenti di output, ognuno contenente NNNN urls. Crawling
26
Estrazione outlink: esempio
Usiamo il comando mergeseg per fondere i vari segmenti ottenuti con il crawling: nutch mergesegs whole-segments -dir mycrawl/segments/ Quindi usiamo il comando readseg per estrarre outlink dal segmento globale ottenuto: nutch readseg -dump whole-segments/ / dump-outlinks N.B. Ogni segmento viene identificato con la data e l'ora in cui è stato creato. Nell'esempio la directory è: perché il segmento è stato creato il alle 17:41:33. Infine utilizziamo il seguente comando: cat dump-outlinks/dump | egrep 'URL|toUrl' >outlinks.txt per creare il file con i soli outlink. Crawling
27
Creazione della lista dei link
Utilizziamo nutchGraph.jar già presente in lib disponibile sul sito. Settare il classpath ed eseguire: java nutchGraph.PrintInlinks inlinks.txt >links.txt java nutchGraph.PrintOutlinks outlinks.txt >>links.txt Rimozione di eventuali duplicati: LANG=C sort links.txt | uniq >cleaned-links.txt Con more verrà visualizzato il contenuto di cleaned- links.txt. Per file molto lunghi invece di more si può utilizzare head per la visualizzazione delle prime righe o tail per la visualizzazione delle ultime righe. Crawling
28
Creazione mappa delle URL
cut -f1 links.txt >url-list.txt cut -f2 links.txt >>url-list.txt LANG=C sort url-list.txt | uniq >sorted-url-list.txt java -Xmx2G it.unimi.dsi.util.FrontCodedStringList -u -r 32 umap.fcl < sorted-url-list.txt java -Xmx2G it.unimi.dsi.sux4j.mph.MWHCFunction umap.mph sorted-url-list.txt Crawling
29
numNodes=$(wc -l < sorted-url-list.txt)
Creazione del grafo java -Xmx2G nutchGraph.PrintEdges cleaned-links.txt umap.mph > webgraph.dat numNodes=$(wc -l < sorted-url-list.txt) java -Xmx2G nutchGraph.IncidenceList2Webgraph $numNodes webgraph java -Xmx2G it.unimi.dsi.webgraph.BVGraph -g ASCIIGraph webgraph webgraph Crawling
30
Download delle pagine html
Procediamo all'indicizzazione delle pagine raccolte da Nutch mediante MG4J. Le pagine devono essere precedentemente scaricate, visto che non è possibile ottenerle dal db di Nutch. Scaricare le pagine: wget –i sorted-url-list.txt Crawling
31
WEB Nutch getfiles MG4J IPS Link structure txt2IPS files readdb
ParserDB db graph.txt getfiles txt2IPS files PageRank RankPG QueryMG4J IPS MG4J Query HITS RankHITS Crawling
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.