Wikipedia Web Scraper was an Exam Project for the "Programming Methodologies" course of the first year at Computer Science - Sapienza University of Rome.
Project Requests and Installation Tutorial is in Italian.
Il seguente progetto verterà sulla creazione di uno o più alberi genealogici relativi a ciascuna dinastia di Imperatori Romani, con lo scopo di visualizzare le diverse relazioni parentali che intercorrono.
Poiché tale processo dovrà essere il più automatico possibile andando ad attingere da diverse fonti dati presenti su Wikipedia, ai fini della realizzazione
dovrà essere impiegata la tecnica del web scraping. Essa sarà necessaria per
l’ottenimento delle informazioni relative alle diverse interazioni familiari di ciascun membro delle dinastie. L’infografica rappresenta l’albero genealogico della dinastia Giulio-Claudia con le relazioni parentali che intercorrono tra i diversi membri. Il nome dei sovrani è descritto tramite una formattazione in grassetto del loro nome, insieme alla data di inizio e fine regno.
Da un punto di vista tecnico, il progetto richiederà l’utilizzo di Selenium, un framework open-source multipiattaforma impiegato per il testing applicazioni web e, come nel nostro caso, per effettuare operazioni di web scraping.
A livello di specifiche, il progetto utilizzerà il web scraping e le interfacce grafiche al fine di:
- Ottenere gli Imperatori di ciascuna Dinastia, partendo dalla pagina di Wikipedia fornita all’inizio della descrizione.
- Visitare la pagina di ogni imperatore di ciascuna dinastia al fine di prelev- are le sue relazioni di parentela. Ad esempio, riferendosi alla pagina Wiki- pedia di Augusto.
- Creare un albero genealogico per ciascuna dinastia mediante gli strumenti grafici visti a lezione.
- Hierarchy : Package che racchiude le tre classi Dynasty, Imperator e Person le quali gestiscono
le gerarchie degli imperatori.
- Dynasty : La classe Dynasty è stata realizzata per unire tutti gli imperatori di una stessa dinastia in un unico oggetto.
- Person : La classe Person si occupa di gestire tutte le persone quali madri, padri, figli che sono collegate agli imperatori, inoltre essa sarà estesa dalla classe Imperator.
- Imperator : La classe estende la classe Person, aggiungendo agli attributi della classe Person altri due: Predecessor e Sucessor.
- Table : La classe Table serve per estrarre e gestire tutti gli oggetti Wikitable che sono nella pagina HTML di Wikipedia contenenti le dinastie con i rispettivi imperatori.
- WikipediaClass : La classe gestisce l’apertura di Chrome, il collegamento a Wikipedia ed estrae tutte. le tabelle delle dinastie dalla pagina principale degli Imperatori Romani.
- WikipediaScraperTester : La classe testa il funzionamento dello Scraper, e attraverso una serie di print per ogni Imperatore verifica il funzionamento del codice.
- Line : Lo scopo della classe Line è quella di costruire la linea che poi viene tracciata nell’ ImperatorPanel.
- Point : Lo scopo della classe Point è quello di determinare le coordinate del punto(X,Y).
- PersonMouseAdapter : Lo scopo della classe PersonMouseAdapter è quello di aprire la pagina Web di una persona quando si clicca su di essa.
- ImperatorScraper : La classe ImperatorScraper è la parte principale del progetto in cui viene avviata e gestita l’intera applicazione costruendo passo per passo la struttura dati contenente i dati raccolti e la struttura grafica per rappresentarli.
- ImperatorCard : Lo scopo della classe ImperatorCard è quello di andare a disegnare a partire dall’imperatore tutta la dinastia, facendo attenzione alla tipologia di successore(figlio o meno) e formattando sull’interfaccia le posizioni delle mogli e dei figli.
- ImperatorPanel : Lo scopo della classe ImperaratorPanel è quella di avere un pannello sul quale andare a disegnare le linee e le varie etichette.
- PersonCard : Lo scopo della classe PersonCard è quello di definire un’opportuna rappresentazione grafica dei dati raccolti di ogni persona, in modo da renderizzare una visuale chiara utilizzando delle etichette contenenti il nome.
- Scaricare la versione di Selenium più recente dal sito oppure cliccare direttamente il seguente link.
- Creare il Java Project nel quale si vuole utilizzare la libreria.
- Cliccare con il tasto destro del mouse sul progetto, andare nella sezione Built Path e cliccare su Configure Built Path.
- Cliccare su Java Built Path nella tendina di sinistra.
- Selezionare Class Path e cliccare su Add External JARs.
- Aprire la cartella in cui è presente lo zip appena scaricato (da cui devono essere stati estratti i file).
- Aprire la cartella e selezionare tutti i file interni.
- Ripetere il punto e selezionare i rimanenti Executable Jar File.
- Cliccare su Apply and Close.
- Modificare nella classe ImperatorScraper il path nella seguente riga:
System.setProperty(”webdriver.chrome.driver”,”CHANGE ME");
- con il proprio percorso a ”chromedriver.exe”.
- Modificare nella classe WikipediaClass il path nella seguente riga:
System.setProperty(”webdriver.chrome.driver”,”CHANGE ME”);
- con il proprio percorso a ”chromedriver.exe”.
- Modificare nella classe WikipediaScraperTester il path nella seguente riga:
System.setProperty(”webdriver.chrome.driver”,”CHANGE ME”);
- con il proprio percorso a ”chromedriver.exe”.
Se non si dispone di questo Driver, seguire le seguenti istruzioni
- Verificare sul proprio PC la versione attuale di Chrome:
- Aprire una pagina Google
- Cliccare i tre punti in alto a destra e selezionare l'opzione Guida.
- Cliccare su Informazione su Google Chrome.
- Si aprirà una pagina con la versione attuale del vostro Chrome.
- Accedere al seguente link.
- Scaricare la versione corrispondente alla vostra.
- Scegliere il sistema operativo.
- Estrarre il file zip scaricato.
- A questo punto inserire il percorso del file appena scaricato all'interno dei punti 1,2,3 nelle rispettive classi.
- Aprire la classe ImperatorScraper ed eseguirla.
- Attendere che vengano aperte le pagine Wikipedia di ogni Imperatore in modo da formare i rispettivi alberi.
- Alla fine del caricamento cliccare sull’icona di Java presente sulla barra delle applicazioni.
- A questo punto verrà visualizzata un interfaccia contenente tutte le Dinastie.
- Cliccare sul nome della Dinastia che si vuole visualizzare.
- Una volta entrati all’interno di un albero, per torna alla pagina iniziale bisognerà cliccare il pulsante in basso.