Sviluppo di un Web Crawler in Java - prima parte

Maggio 18th, 2012

E' da tempo che vorrei sviluppare un Web Crawler e con questo progetto, insieme agli altri ventimila, finalmente riuscirò a farlo. Subito, una delle prime domande è a cosa serve un Web Crawler?

Un Web Crawler o spider o robot "attraversa" la rete Web, analizza il codice HTML e lo copia trovando titoli, links, keywords  e altro ancora. Normalmente, i motori di ricerca ne fanno uso per capire cosa c'è e come cambia il WWW (World Wide Web).

Per dovere di cronaca, è da sapere che il primo Web Crawler (Matthew Gray's Wanderer) risale al  lontano 1993 all'epoca di Mosaic un Browser scritto dalla NCSA (Nation Center Supercomputing Applications). Da allora i Web Crawlers si sono moltiplicati e adattati alla struttura della rete e i più famosi sono l'originale Google Crawler (sviluppato a Stanford) e l'Internet Archive Crawler.

Ma come funzionano i Web Crawlers?

L'immagine seguente spiega a grandi linee il funzionamento di un Web Crawler. Innanzi tutto, un Web Crawler scansiona il web con diverse modalità e copia in un database le pagine visitate (STORAGE DATABASE).  A questo punto, le pagine vengono successivamente elaborate dal motore di ricerca e proposte secondo alcuni algoritmi di ordinamento sul Web, in sostanza ciò che fa Google attualmente.

 

Perchè in linguaggio Java?

Con questo linguaggio sono stati progettati numerosi Web Crawler. I più famosi, non in ordine di importanza, sono: Heretrix, WebSPHINX, Web-Harvest, e JSpider. Java è stato una scelta obbligata, sia per i motivi sopra elencati, sia per la maturità del linguaggio e sia per una certa mia esperienza in numerosi progetti.

Esistono differenti tipi di Web Crawlers?

Si, a seconda della modalità con cui vengono scaricate le pagine di un sito Web. L'elenco seguente indica le diverse modalità per ognuna delle quali farò un esempio più avanti e nelle prossime puntate.

Ecco l'elenco dei diversi tipi di Web Crawlers:

  1. Breadth First Crawlers
  2. Depth First Crawlers
  3. Path Ascending Crawlers
  4. Random Walk
  5. Focused Crawling
  6. Incremental Crawling

Iniziamo dal primo tipo di Web Crawler e cerchiamo di spiegarlo brevemente così da non annoiare nessuno con un escursus troppo tecnico.

Breadth First Crawlers ossia ricerca in ampienza.

Per la teoria dei grafi partendo da un vertice detto nodo (che nella ricerca del Web Crawler corrisponde alla pagina principale o main page) o sorgente si esplorano i nodi successivi (pagine ricavate dai link trovati) nei livelli inferiori.
In sostanza il Web Crawler analizza la main page e trova dei links (nuove pagine) che vengono inseriti in fondo ad una coda. Il link nella "coda" viene nuovamente analizzato e così di seguito i nuovi links trovati vengono ancora accodati in fondo. Questo si ripete finchè nella coda non vi sono più links. La seguente immagine vi aiuterà a comprendere l'algoritmo di ricerca.

 

Come vedete nella main page (pallino azzurro) sono stati trovati dei links; Questi vengono memorizzati in fondo ad una coda e le pagine (pallini gialli) a cui rimandano, saranno rilette dal Web Crawler per la ricerca di nuovi links. Il tutto si ripete finchè non vi sono più link presenti nella coda. Così le pagine dei livelli superiori (a distanza minore) vengono scoperte prima delle pagine dei livelli inferiori (a distanza superiore).

Depth First Crawlers ossia ricerca in profondità.

Questa modalità di scansione dei links è diversa dalla precedente in quanto segue i "rami" dell'albero (teoria dei grafi). Cosa significa?

Ancor prima di "visitare" i nodi vicini alla sorgente (main page) l'algoritmo può andare in profondità e raggiungere i nodi più lontani. I nuovi links trovati invece di  essere inseriti in fondo alla coda vengono inseriti in cima alla coda e sono i primi ad essere visitati. Così di pagina in pagina il percorso può corrispondere ad un ramo dell'albero e quindi esplorare e visitare pagine a distanze diverse. Una volta che non si trovano più links (a cui corrispondono nuove pagine) l'algoritmo torna indietro fino a trovare dei links che non sono stati ancora esplorati così da percorrere altri rami del grafo.

Il tutto inizia dalla prima pagina o sorgente, il primo link trovato nel nodo (1) viene posto in cima alla coda e quindi visitato e si accede al nodo (2). Il primo link a questa distanza dal nodo sorgente viene posto in cima alla coda e quindi visitato e si accede al nodo (3). In questo nodo non vengono trovati nuovi link e quindi si torna al nodo (2) e si visita il nodo (4) e così di seguito.

Per ora, termino questa prima puntata e nella prossima continueremo con l'analisi dei diversi tipi di Web Crawlers. Ovviamente, vi invito a scrivere le vostre considerazioni o le vostre perplessità sull'argomento...

Ecco come importare un file CSV in una tabella MYSQL

Maggio 2nd, 2012

Oggi, vi mostrerò come importare un file CSV in una tabella MySQL.

Ma a cosa serve?

Alcune volte, si ha la necessità di popolare una tabella MySQL con una serie di informazioni disponibili soltanto su un file in formato CSV (Comma Separated Values). Ricordo che tale tipologia di file la possiamo ottenere sia con OpenOffice che con l'Excel di Microsoft.  Per esempio, poniamo il caso di voler esportare in formato CSV un file Excel (.XLS) con diverse colonne e diversi dati; Da calc di Openoffice basta selezionare il menu FILE e scegliere l'opzione "Salva con Nome" come indicato nell'immagine seguente.

A questo punto si aprirà la seguente schermata ove bisognerà inserire il nome del file e il tipo di file da salvare e ovviamente qui selezionate TESTO CSV(.csv) con l'opzione modifica impostazioni filtro selezionata.

L'opzione "Modifica impostazioni filtro" vi permetterà di scegliere il carattere separatore di campo e il carattere separatore di testo come indicato nell'immagine seguente.

Come potete vedere in questo caso è stato inserito come separatore di campo il carattere "|" e come separatore di testo le virgolette.  Di seguito, ho ottenuto il file CSV che ho aperto con il notepad di Windows (immagine seguente).

Continuando il nostro percorso di importazione, ora, dobbiamo creare una nuova tabella all'interno del database MySQL e, normalmente, tale operazione è eseguita da un client MySQL Query Browser (per i più vecchi) o MySQL Workbench quest'ultimo scaricato ed installato dal sito di Oracle dal seguente indirizzo internet: http://www.mysql.com/products/workbench/ .

Comunque, la procedura per la creazione di una nuova tabella in MySQL è abbastanza facile; Con MySql Query Browser basta fare un bel "click"  sullo schema o database in cui aggiungere la nuova tabella e scegliere l'opzione "Create New Table".

A questo punto una nuova finestra si aprirà e in questa si dovranno aggiungere i nuovi campi come di seguito mostrato.

Il numero di campi da creare corrisponde al numero di colonne del file Excel popolato di partenza. Così, se il vostro file Excel possiede otto colonne da importare, nella tabella di MySQL darete origine ad otto campi in MySQL di tipo VARCHAR(255) o di tipo TEXT (questa opzione è generica, altrimenti formattateli come più vi conviene). A questo punto, nel client MySQL Query Browser inserite le seguenti righe:

load data local infile 'C:/filediesempio.csv' into table PROVA
fields terminated by '|'
enclosed by '"'
lines terminated by '\r\n'
(Campo1, Campo2, Campo3, Campo4, Campo5, Campo6, Campo7,Campo8)

Cosa significa?

Allora, la prima riga si occupa di indicare dove si trova il vostro file CSV (filediesempio.csv) e la tabella di destinazione in MySQL che per ragioni di esempio ho indicato con PROVA. Con la seconda riga indicate con quale carattere nel file CSV sono separati i campi. Nella terza riga indicate che i campi sono contenuti da doppi apici, e nella quarta riga dite al programma che per caricare la riga successiva la linea terminerà con la sequenza di caratteri \r\n (per maggiori informazioni sulla sequenza di fine riga leggete il seguente articolo: http://it.wikipedia.org/wiki/Newline) . Infine, l'ultima riga indica i nomi dei campi da caricare. Quindi, la prima colonna dell'Excel verrà riversata nella tabella PROVA nel Campo1, la seconda colonna nel Campo2 e così via.

Ovviamente, dopo aver effettuato il caricamento dei dati potrete verificare con una SELECT * FROM PROVA se tutto è andato a buon fine.

In un prossimo articolo vedremo come confrontare i dati appena caricati in MySQL con i dati presenti in un file di un sistema AS/400 tramite un programma JAVA.

Ottava Lezione - Installazione Java Development Kit su piattaforma Windows

Marzo 24th, 2012

Come per l'installazione del JDK (Java Development Kit) per GNU/Linux ora, è la volta di Windows e in particolare della versione XP.

Per prima cosa, bisogna navigare sulla pagina di download del sito Oracle disponibile al seguente indirizzo internet:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

e scegliere la colonna JDK Download come indicato nell'immagine successiva.

Dopo un bel click con il tasto destro del mouse sulla voce "Download" si aprirà una nuova finestra nella quale si dovrà scegliere la versione di JDK da scaricare in base al tipo di sistema operativo utilizzato.  Considerato che,  il nostro sistema è un Windows XP le versioni da scaricare sono principalmente due: quella a 32 bit e quella a 64 bit. Nel caso in esempio  il sistema operativo a nostra disposizione è a 32 bit e quindi bisogna scaricare la versione a 32 bit indicata  dalla dicitura  "i586.exe".

 

Ma come si verifica se la versione del mio sistema operativo è a 32 o a 64 bit?

Per verificare se il vostro sistema operativo Windows è a 32 bit o a 64 bit basta selezionare il tasto START presente in basso a sinistra del vostro schermo, selezionare la voce Esegui, e nel campo testo immettere il comando winver (prima immagine seguente); Una nuova schermata (seconda immagine seguente)  vi comunicherà la versione.

 

Per ottenere lo stesso risultato potete anche fare due click con il tasto destro del mouse sull'icona Risorse del Computer presente sul vostro desktop e selezionare dalla barra dei menu il simbolo  '?'. A questo punto scegliete l'opzione "Informazioni su Windows" come indicato nell'immagine successiva.

Per precisione  Windows XP a 32 bit è una versione NT 5.1, mentre Windows XP a 64 bit è una versione NT 5.2. Per cui se trovate NT 5.1 è sicuramente un Windows XP.

Se invece, possedete Windows Vista o Windows 7 selezionate il tasto START in basso a sinistra, e scegliete l'opzione Pannello di Controllo > Sistema Sicurezza > Sistema. Nella schermata che apparirà potrete capire se il vostro sistema Windows è a 32 o 64 bit.

 

 

A questo punto, potete effettuare il download corretto del JDK dopo aver accettato i termini di licenza.

Dopo aver scaricato l'eseguibile "da qualche parte nel vostro PC" avviatelo con un doppio click del mouse e procedete all'installazione rispondendo ad alcune domande.

Per quanto riguarda l'installazione sui sistemi operativi quali Windows Vista o Windows 7 dovete avere l'accortezza di avviare l'eseguibile con i diritti di amministratore. Per far ciò dovete fare un click con il tasto destro del mouse sull'eseguibile, scegliere l'opzione proprietà, la scheda compatibilità, e selezionare l'opzione "Esegui come Amministratore".

Pagine: 1 · 2