3.4 Analisi dei siti internet esplorati dal sistema
3.4.3 Estrazione delle informazioni testuali
Nonostante siano espresse in linguaggio naturale, le informazioni testuali da ricavare hanno comunque una struttura piuttosto definita e possono essere ricavate in modo sufficientemente preciso tramite ricerca con regular expression[g]o tramite altre metodologie euristiche, senza dover necessariamente ricorrere a strumenti di elaborazione del linguaggio naturale, i quali possono risultare pesanti in termini di prestazioni e di difficile apprendimento, comprensione e manutenzione.
3.4.3.1 Indirizzi Email
Gli indirizzi email sono ricavabili tramite due metodologie:
• Ricerca dei link html con prefisso mailto: Usati per richiamare da browser il software usato per la gestione della propria casella di posta e comporre una nuova email con destinatario precompilato [5];
• Ricerca tramite regular expression: Avendo una struttura ben definita, gli indirizzi email si prestano bene alla ricerca tramite espressioni regolari.
3.4.3.2 Link ai social media
Analizzando i siti web proposti, ho potuto ricavare quattro diverse metodologie per estrarre link ai social media dai siti aziendali:
• Analisi degli attributi class dei tag: Molte aziende inseriscono link o testo facente riferimento ai propri social media all’interno di tag o contenitori con class contenente la parola “social”;
• Analisi degli attributi id dei tag: Similmente alle class, molte aziende inseriscono link o testo facente riferimento ai propri social media all’interno di tag o contenitori con id contenente la parola
“social”;
• Analisi dei microdata Ld+Json: I microdata possono contenere un campo “sameAs” che identifica siti collegati alla stessa azienda, solitamente questo campo è usato per i social media;
• Analisi dei link: È possibile analizzare l’attributo href di tutti i link, alla ricerca di possibili social media, filtrandoli per dominio, i domini più usati sono Facebook, Instagram, YouTube e LinkedIn.
3.4.3.3 Partite IVA/Codici Fiscali
Le partite IVA in Italia hanno una struttura ben precisa composta da un eventuale codice nazione (IT) ed un numero ad 11 cifre.
Nei siti web questo pattern può essere preceduto da vari prefissi tra cui “P.I.”, “C.F” e “P.Iva”, quindi ho deciso di usare una lista dalla quale ricaverò una serie di alternative da inserire in un’espressione regolare.
Tale lista è simile alla seguente:
PARTITA_IVA_PREFIX = ["PI", "P.I", "P.I.", "CF",
"C.F.", "C.F", "P.Iva", "PIva",
"Partita IVA", "VAT", "UID"]
Tale lista andrà poi a generare il prefisso di un’altra espressione regolare atta a rilevare il resto del codice fiscale o partita IVA.
Questo permette di estendere facilmente i prefissi senza dover andare a modificare direttamente l’espressione regolare stessa.
3.4.3.4 Numeri telefonici
I numeri telefonici possono avere strutture molto diversificate, contenenti caratteri di separazione diversi in diverse posizioni, precedute da diversi prefissi e con una lunghezza che va dalle 6 alle 10 cifre.
È stata quindi costruita un’espressione regolare che possa accettare la maggior parte dei numeri di telefono incontrati finora.
3.4.3.5 Indirizzi geografici
Gli indirizzi geografici possono avere strutture estremamente eterogenee e non è possibile rappresentare tali strutture con un linguaggio regolare, ma è comunque possibile estrarne un sottoinsieme molto limitato che in molti casi può risultare soddisfacente.
Per questo sono state create due espressioni regolari per ricercare i due formati di indirizzo più comune, cioè quelli nei formati:
• prefisso strada numero località CAP paese provincia nazione
• CAP paese prefisso strada numero
Eventuali elementi non presenti sono stati gestiti all’interno dell’espressione, aumentando la probabilità di trovare una corrispondenza.
4 Analisi dei requisiti
Walking on water and developing software from a specification are easy if both are frozen.
Edward Berard
4.1 Casi d’uso
Dato che il sistema è quasi completamente automatico, e l’unico attore coinvolto è l’utente autenticato, i diagrammi dei casi d’uso sono pochi e molto semplici.
I dati necessari per l’esecuzione dello scraping sono automaticamente ricavati dallo stato della web-app, in modo che l’interazione dell’utente sia minima o nulla.
In Figura 1 si riportano i casi d’uso riguardanti l’obiettivo obbligatorio di creazione di una componente di Web Scraping.
Figura 1: Diagramma dei casi d’uso per la componente WebScraper
ID UC1.
Titolo Avvio dello web scraper.
Attori primari Utente Autenticato.
Pre-condizione L’attore è autenticato presso il sistema e visualizza il pulsante "Avvia Scraping".
Post-condizione Il sistema salva il risultato dello scraping in database.
Scenario principale
1. L’attore clicca sul pulsante "Avvia Scraping";
2. Il sistema avvia un task[g]in background[g] che effettua lo scraping;
3. Alla fine del task, il sistema salva in database i risultati dello scraping.
ID UC2.
Titolo Visualizzazione dei risultati dello scraping.
Attori primari Utente Autenticato.
Pre-condizione L’utente è autenticato presso il sistema, il task di scraping è terminato e visualizza il pulsante "Visualizza Risultati".
Post-condizione Il sistema visualizza una finestra modale[g] con i risultati dello scraping.
Scenario principale
1. L’attore clicca sul pulsante "Visualizza Risultati";
2. Il sistema recupera i dati dal database;
3. Il sistema visualizza a schermo una finestra modale con i risultati dello scraping.
ID UC3.
Titolo Riavvio di uno scraping completato.
Attori primari Utente Autenticato.
Pre-condizione L’utente è autenticato presso il sistema, il task di scraping è terminato e visualizza il pulsante "Riavvia Scraping".
Post-condizione Il sistema cancella i dati salvati, esegue un nuovo scraping e salva il risultato in database.
Scenario principale
1. L’attore clicca sul pulsante "Riavvia Scraping";
2. Il sistema avvia un task in background che elimina i dati esistenti ed effettua un nuovo scraping;
3. Alla fine del task, il sistema salva in database i risultati del nuovo scraping.
È stato inoltre pianificato un obiettivo desiderabile consistente nell’implementazione di una componente di scraping dal catasto, i cui casi d’uso sono esposti in Figura 2.
Figura 2: Diagramma dei casi d’uso per la componente LRScraper
ID UC4.
Titolo Avvio dello scraper catasto.
Attori primari Utente Autenticato.
Pre-condizione L’utente è autenticato presso il sistema e visualizza il pulsante "Avvia Scraping del Catasto".
Post-condizione Il sistema salva in database la lista degli omonimi in catasto corrispondenti alla ragione sociale del cliente cercato.
Scenario principale
1. L’utente clicca sul pulsante "Avvia Scraping del Catasto";
2. Il sistema avvia un task in background per ricercare gli omonimi del cliente cercato nei registri catastali;
3. Il sistema salva in database la lista degli omonimi trovati.
ID UC5.
Titolo Scelta dell’omonimo catastale da elaborare.
Attori primari Utente Autenticato.
Pre-condizione L’utente è autenticato presso il sistema e visualizza un elenco di omonimi catastali tra cui scegliere.
Post-condizione Il sistema salva in database i risultati dello scraping dell’omonimo catastale scelto.
Scenario principale
1. L’utente clicca su un omonimo catastale da elaborare;
2. Il sistema avvia un task in background per ricavare informazioni sull’omonimo scelto;
3. Il sistema salva in database il risultato dello scraping.
ID UC6.
Titolo Visualizzazione dei risultati dello scraping del catasto.
Attori primari Utente Autenticato.
Pre-condizione L’utente è autenticato presso il sistema, il task di scraping è terminato e l’utente visualizza il pulsante "Visualizza Risultati".
Post-condizione Il sistema visualizza una finestra modale contenente i risultati dello scraping effettuato.
Scenario principale
1. L’utente clicca sul pulsante "Visualizza Risultati";
2. Il sistema recupera dal database i dati corrispondenti allo scraping del cliente ricavato dal contesto;
3. Il sistema visualizza una finestra modale contenente i risultati dello scraping effettuato;
ID UC7.
Titolo Riavvio di uno scraping del catasto completato.
Attori primari Utente Autenticato.
Pre-condizione L’utente è autenticato presso il sistema, il task di scraping è terminato e l’utente visualizza il pulsante "Riavvia Scraping del Catasto".
Post-condizione Il sistema elimina i dati dello scraping precedente, e riavvia la procedura di scraping degli omonimi catastali.
Scenario principale
1. L’utente clicca sul pulsante "Riavvia Scraping del Catasto";
2. Il sistema elimina i dati dello scraping precedente per il cliente;
3. Il sistema avvia nuovamente il task di scraping degli omonimi catastali.