Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

Pagina creata da Valerio Pinto
 
CONTINUA A LEGGERE
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment
Università degli Studi di Padova

           Dipartimento di Matematica "Tullio Levi-Civita"

                     Corso di Laurea in Informatica

  Sviluppo di strumenti di web scraping per il
 miglioramento dei processi di data enrichment

Relatore
Luigi De Giovanni
                                                            Laureando
                                                       Daniele Penazzo
                                                         Mat: 1007651

                         Anno Accademico 2017/2018
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment
Daniele Penazzo: Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment,
                                Tesi di laurea triennale, © Settembre 2018.
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment
Perseverance is the backbone of success.

                                                                               Anonymous

Alla mia famiglia
Ai miei amici, nazionali e non
A coloro che non si arrendono mai
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

Indice
1 Introduzione                                                                                                                                                                                    6
  1.1 L’azienda . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6
  1.2 L’idea . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6
  1.3 Organizzazione del testo       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    6
  1.4 Introduzione al progetto       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7

2 Pianificazione delle attività                                                                                                                                                                   8
  2.1 Obiettivi fissati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                                   8
  2.2 Pianificazione temporale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                                                      9

3 Analisi preventiva                                                                                                                                                                             10
  3.1 Analisi preventiva dei rischi . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
  3.2 Piano di contingenza . . . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  3.3 Analisi dell’architettura esistente . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
  3.4 Analisi dei siti internet esplorati dal sistema                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
      3.4.1 Criticità rilevate . . . . . . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
      3.4.2 Estrazione dei loghi . . . . . . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
      3.4.3 Estrazione delle informazioni testuali                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14

4 Analisi dei requisiti                                                                                                                                                                          17
  4.1 Casi d’uso . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
  4.2 Tracciamento dei requisiti .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      4.2.1 Requisiti Funzionali             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      4.2.2 Requisiti di Qualità             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
      4.2.3 Requisiti di Vincolo             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
      4.2.4 Riepilogo Requisiti .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26

5 Progettazione                                                                                                                                                                                  27
  5.1 Tecnologie e strumenti . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
      5.1.1 Python 3 . . . . . . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
      5.1.2 Flake8 . . . . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
      5.1.3 Django . . . . . . . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
      5.1.4 DjangoREST . . . . . . . . . . . . . . .                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      5.1.5 Celery . . . . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      5.1.6 Swagger . . . . . . . . . . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      5.1.7 Vagrant . . . . . . . . . . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      5.1.8 VirtualBox . . . . . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
      5.1.9 BeautifulSoup4 . . . . . . . . . . . . . .                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
      5.1.10 PostgreSQL . . . . . . . . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
      5.1.11 Selenium . . . . . . . . . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
      5.1.12 Requests . . . . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      5.1.13 NeoVIM . . . . . . . . . . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      5.1.14 JavaScript . . . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      5.1.15 ESLint . . . . . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
      5.1.16 ReactJS . . . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
      5.1.17 Redux . . . . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
      5.1.18 Bundle-js . . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
      5.1.19 Scrapy . . . . . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
  5.2 Ciclo di vita del software . . . . . . . . . . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
  5.3 Design Pattern utilizzati . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
      5.3.1 Chain of Responsibility Design Pattern                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33

INDICE                                                                                                                                                                                           III
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

         5.3.2 Pipeline design pattern . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
   5.4   Altre scelte di design . . . . . . . . . . . . . . . . . . . .                                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
         5.4.1 Interfacce fluide per la costruzione della pipeline                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
   5.5   Progettazione dell’architettura . . . . . . . . . . . . . .                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
         5.5.1 Classi e moduli . . . . . . . . . . . . . . . . . . .                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
   5.6   Punti di estensione dell’architettura . . . . . . . . . . .                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38

6 Codifica                                                                                                                                                                                             39
  6.1 Norme di codifica seguite . . . . . . . . . . . . . . . . . . . .                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
      6.1.1 Python . . . . . . . . . . . . . . . . . . . . . . . . . .                                                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
      6.1.2 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . .                                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
  6.2 Gestione del repository Git . . . . . . . . . . . . . . . . . . .                                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
  6.3 Implementazione della pipeline di web scraping . . . . . . . .                                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
  6.4 Creazione della pagina di amministrazione Django . . . . . .                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
  6.5 Implementazione della pipeline di scraping del catasto . . . .                                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
  6.6 Implementazione front-end Django per lo scraping dal catasto                                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
  6.7 Implementazione delle chiamate REST per gli scraper . . . .                                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
  6.8 Implementazione del front-end React . . . . . . . . . . . . . .                                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43

7 Verifica e Validazione                                                                                                                                                                               45
  7.1 Analisi Statica . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  7.2 Analisi Dinamica .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  7.3 Specifica dei test .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
  7.4 Validazione . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51

8 Conclusioni                                                                                                                                                                                          52
  8.1 Consuntivo dei rischi . . . . . . . . . . . . . . . . . . .                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
  8.2 Raggiungimento degli obiettivi . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
  8.3 Conoscenze acquisite . . . . . . . . . . . . . . . . . . .                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
  8.4 Valutazione personale . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
      8.4.1 Valutazione del progetto di stage . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
      8.4.2 Valutazione dello stage e del progetto RiskApp                                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
      8.4.3 Valutazione finale . . . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54

Glossario                                                                                                                                                                                              56

INDICE                                                                                                                                                                                                 IV
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

Elenco delle tabelle
   1    Obiettivi fissati nel piano di lavoro . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
   2    Pianificazione del lavoro . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
   4    Descrizione dei rischi, con probabilità ed incidenza.     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
   5    Piano di contingenza dei rischi. . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
   6    Tabella di tracciamento dei requisiti funzionali . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
   7    Tabella di tracciamento dei requisiti di qualità . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
   8    Tabella di tracciamento dei requisiti di vincolo . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
   9    Riepilogo dei requisiti . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
   10   Specifica dei test automatici implementati . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
   11   Consuntivo dei rischi rilevati . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52
   12   Raggiungimento degli obiettivi di progetto . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   52

Elenco delle figure
   1    Diagramma dei casi d’uso per la componente WebScraper .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
   2    Diagramma dei casi d’uso per la componente LRScraper .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
   3    Schema del ciclo di vita incrementale . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
   4    Esempio di lavagna Kanban . . . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
   5    Esempio di chain of responsiblity pattern . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
   6    Struttura del pipeline pattern . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
   7    Schema esemplificativo del funzionamento dell’architettura                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
   8    Schema di gestione del repository Git [31] . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
   9    I nuovi modelli nella pagine di amministrazione Django . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
   10   Ricerca nel pannello amministrativo Django . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
   11   Modifica di un dato dal pannello amministrativo . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
   12   Schermata di ricerca dello scraper del catasto . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
   13   Scelta dell’omonimo catastale . . . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
   14   Avvio di un nuovo scraping da front-end . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
   15   Visualizzazione risultati o riavvio di uno scraping . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
   16   Visualizzazione dello stato dello scraping . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
   17   Visualizzazione dei risultati dello scraping . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44

ELENCO DELLE FIGURE                                                                                                                                               V
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

Sommario
Il presente documento descrive il lavoro svolto durante il periodo di stage, della durata di 312 ore, dal
laureando Daniele Penazzo presso l’azienda RiskApp S.r.l.
Gli obiettivi da raggiungere erano molteplici.
In primo luogo era richiesto lo sviluppo di una componente di web scraping da integrare alla piattaforma
esistente, tale componente doveva effettuare ricerche ed esplorare siti internet alla ricerca di informazioni
che possano ritenersi interessanti a fini assicurativi. Tale componente inoltre doveva avere determinate
caratteristiche di modularità, estensibilità ed autonomia.
In secondo luogo era richiesto lo sviluppo di una componente di scraping specifica per il catasto, da integrare
ancora una volta sulla stessa piattaforma, allo scopo di ricavare ulteriori informazioni di interesse dal catasto
nazionale, eventualmente richiedendo una visura catastale.
Successivamente è stato richiesto di implementare delle componenti di front-end, degli endpoint REST per
l’applicazione web ed una suite di test che garantisse una buona copertura del codice scritto. Oltre a ciò è
stata richiesta l’integrazione delle componenti esposte nella piattaforma RiskApp.

ELENCO DELLE FIGURE                                                                                            2
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

Ringraziamenti

                                               As we express our gratitude, we must never forget that the highest
                                               appreciation is not to utter words but to live by them.

                                                                                                  John F. Kennedy

Vorrei ringraziare il Prof. Luigi De Giovanni, relatore della mia tesi, per l’aiuto datomi durante la stesura del
lavoro.
Desidero inoltre ringraziare i miei genitori per il sostegno e pazienza portati in questi anni.
Ho desiderio di ringraziare i miei amici più vicini per il sostegno morale e l’aiuto offerti oltre alla loro
vicinanza nei momenti più duri.
Padova, Settembre 2018                                                                            Daniele Penazzo

ELENCO DELLE FIGURE                                                                                             4
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

1     Introduzione

1.1     L’azienda

RiskApp S.r.l. è una start-up che si occupa dello sviluppo di un sistema all-in-one di gestione e valutazione
dei rischi per l’industria assicurativa.
Tale sistema offre supporto ai player assicurativi e bancari che desiderano offrire soluzioni per la copertura
delle piccole e medie imprese, sviluppando modelli di calcolo per l’analisi dei rischi che un’eventuale compagnia
assicurativa vuole coprire.
Il prodotto offre inoltre strumenti per stimare eventi negativi, valutare rischi, aiutare le assicurazioni ad
effettuare decisioni informate e ricevere un rapporto dettagliato e chiaro dei rischi, così da mitigarli o assicurarli.

1.2     L’idea

Internet è un luogo ricco di informazioni e notizie che possono risultare utili per arricchire il profilo di
un’azienda ed aumentare la precisione di un’eventuale valutazione dei rischi. Tali informazioni e notizie si
presentano nella forma di “dati non strutturati” che dovranno essere elaborati per poter essere utilizzati in
modo proficuo all’interno di un sistema informatico.
L’idea è creare un’architettura che permetta di estrarre, in forma maggiormente strutturata e con minimo
intervento da parte dell’utente finale, tali dati in modo da arricchire lo screening informativo delle aziende
analizzate.

1.3     Organizzazione del testo

Il testo è organizzato in sezioni tematiche, nel seguente modo:
    • Introduzione: contenente le informazioni riguardanti l’azienda ospitante, l’idea, l’organizzazione del
      testo ed una breve introduzione al progetto di stage;
    • Pianificazione: dove sono inseriti gli obiettivi accordati con l’azienda e l’organizzazione del lavoro;
    • Analisi Preventiva: per acquisire maggiore conoscenza del dominio di applicazione e dell’architettura
      esistente, esponendo eventuali criticità che possono rendere difficoltoso lo svolgersi del progetto;
    • Analisi dei requisiti: contenente i compiti svolti durante l’attività di analisi dei requisiti;
    • Progettazione: in cui sono presenti tutti i dettagli dell’attività di progettazione dell’architettura;
    • Codifica: contenente le norme di codifica, la gestione del repository [g] GIT ed una visuale retrospettiva
      dell’attività di codifica;
    • Verifica e validazione: in cui sono presenti i dettagli concernenti i test, le attività di verifica e
      validazione finale;
    • Conclusioni: a chiusura del testo.
Per quanto concerne la stesura del testo, sono state le seguenti convenzioni tipografiche:
    • acronimi, abbreviazioni e termini di uso non comune o ambigui vengono definiti nel glossario, situato in
      appendice al presente documento;
    • la prima occorrenza dei termini riportati nel glossario saranno evidenziati nel seguente modo: parola [g] ;
    • i termini in lingua straniera o facenti parte del gergo tecnico sono evidenziati con carattere corsivo.

1   INTRODUZIONE                                                                                                     6
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

1.4      Introduzione al progetto

RiskApp è un software mirato alla gestione e valutazione dei rischi per l’industria assicurativa, una parte
importante del processo di valutazione di un cliente è l’estrazione di dati, la loro trasformazione e successiva-
mente il loro caricamento sulla piattaforma (procedura detta ETL[g] ). Tale procedura sta alla base di un
processo chiamato data enrichment [g] , nel quale questo progetto di stage si inserisce.
Lo scopo del progetto di stage è creare un’architettura in grado di estrarre autonomamente (o con intervento
dell’utente estremamente limitato) dati non strutturati [g] e semi-strutturati [g] da diverse fonti sul web, tra cui:
    •   Google Places;
    •   Google StreetView;
    •   Siti internet aziendali;
    •   Siti web appartenenti a testate giornalistiche;
    •   Il registro dei dati catastali.
L’architettura da costruire deve essere inoltre in grado di superare eventuali ostacoli che solitamente derivano
da una costruzione dei siti web non corretta oppure portata a compimento tramite uso di tecniche obsolete.
Avvenuto il processo di estrazione, l’architettura deve salvare i dati in modo strutturato, facendo eventualmente
uso di campi semi-strutturati come JSON [g] e visualizzarli in una componente front-end creata ad-hoc.
L’architettura deve offrire garanzie di solidità agli errori esterni, così da poter operare in autonomia, e di
alta estensibilità e flessibilità così da poter aggiungere, togliere o riorganizzare stadi di scraping [g] in maniera
semplice e veloce con minime modifiche al codice esistente.

1   INTRODUZIONE                                                                                                   7
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

2        Pianificazione delle attività

2.1       Obiettivi fissati

Nel piano di lavoro sono state pianificati alcuni obiettivi di massima che l’architettura prodotto dell’esperienza
di stage dovrà andare a soddisfare con diverse priorità. Si farà riferimento a tali obiettivi secondo le seguenti
notazioni:
    • OB#: Obiettivo obbligatorio, vincolante in quanto obiettivo primario richiesto dal committente;
    • D#: Obiettivo desiderabile, non vincolante o strettamente necessario, ma dal riconoscibile valore
      aggiunto;
    • OP#: Obiettivo opzionale, rappresentante un valore aggiunto non strettamente competitivo.
Si riporta qui la tabella degli obiettivi posti nel piano di lavoro:

                                 Tabella 1: Obiettivi fissati nel piano di lavoro

    Codice      Descrizione
    OB1         Progettazione ed implementazione di una componente di scraping di dati anagrafici testuali
                da Google Places

    OB2         Progettazione ed implementazione di una componente per lo scraping di dati anagrafici
                testuali dato un URL[g] aziendale

    OB3         Progettazione ed implementazione di una componente di scraping per il recupero di loghi di
                aziende

    OB4         Progettazione ed implementazione di chiamate REST per l’uso da parte del sistema della
                nuova componente

    OB5         Progettazione ed implementazione della componente di Front-end

    OB6         Implementazione dei test automatici di unità per le componenti di scraping da Google
                Places e dai siti web aziendali

    D1          Implementazione dello scraping di dati dal catasto

    D2          Conoscenza dell’impianto esistente

    D3          Implementazione di un sistema per l’acquisizione di screenshot della home page dei siti web
                aziendali

    OP1         Implementazione di test di unità delle componenti non testate in OB6

    OP2         Implementazione di test di integrazione

    OP3         Integrazione dei test nella suite esistente

2   PIANIFICAZIONE DELLE ATTIVITÀ                                                                               8
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

2.2     Pianificazione temporale

Per quanto riguarda la pianificazione temporale si è deciso di dedicare il seguente ammontare di ore ad ogni
attività svolta:

                                      Tabella 2: Pianificazione del lavoro

    Durata    Attività
              Formazione
              • Apprendimento    di   Python avanzato
    72 Ore    • Apprendimento    di   Scrapy
              • Apprendimento    di   Django
              • Apprendimento    di   Swagger

              Analisi ed apprendimento delle tecnologie usate per la gestione del sistema preesistente
              • Analisi del sistema preesistente
    8 Ore
              • Creazione della macchina virtuale a supporto dello sviluppo della componente
              • Creazione dell’ambiente virtuale ed installazione delle dipendenze necessarie allo sviluppo

              Attività di analisi
              • Analisi dei requisiti
    25 Ore
               ◦ Analisi della natura dei dati da raccogliere tramite *scraping*
               ◦ Analisi delle tecnologie alternative (Google APIs for Python)

              Progettazione della componente:
              • Strutturazione delle chiamate *REST*
    30 Ore
              • Strutturazione delle modalità di *scraping*
              • Strutturazione della componente di front-end

              Implementazione della componente:
              • Implementazione della componente di *scraping* di dati testuali
              • Implementazione della componente di *scraping* di dati grafici
    147 Ore
              • Implementazione delle chiamate *REST*
              • Implementazione della componente di front-end
              • Implementazione dello *scraping* di dati del catasto

    30 Ore    Implementazione dei test
    312 Ore   Totale ore pianificate

2    PIANIFICAZIONE DELLE ATTIVITÀ                                                                            9
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

3       Analisi preventiva

                                                   A good programmer is someone who looks both ways before crossing
                                                   a one-way street.

                                                                                                       Doug Linder

3.1       Analisi preventiva dei rischi

Per assicurare uno svolgersi del progetto quanto più possibile privo di inconvenienti, ho provveduto ad
analizzare i rischi che possono verificarsi durante lo svolgersi dello stage.
I rischi sono classificati in forma tabellare, evidenziando:
    •   Un codice identificativo univoco;
    •   La denominazione del rischio, la quale fornisce un’idea di base del rischio stesso;
    •   Una descrizione estesa del rischio;
    •   La probabilità di occorrenza;
    •   L’ incidenza del rischio sullo svolgersi del progetto.
I rischi si suddividono in quattro categorie principali:
    •   RT: Rischi legati alle tecnologie usate;
    •   RP: Rischi personali;
    •   RS: Rischi strumentali;
    •   RR: Rischi riguardanti i requisiti.

                           Tabella 4: Descrizione dei rischi, con probabilità ed incidenza.

    Codice     Denominazione       Descrizione                                      Probabilità     Incidenza
    RT1        Inesperienza        Alcune tecnologie adottate potrebbero non          Media            Alta
               Tecnologica         essere conosciute o di difficile comprensione.

    RT2        Problemi            La strumentazione può essere soggetta a            Bassa           Bassa
               Hardware e          malfunzionamenti ed il software può avere
               Software            problemi di compatibilità, con possibili
                                   perdite di dati e difficoltà nell’avanzamento
                                   del progetto

    RP1        Problemi            In un progetto su che ha lunga durata,             Bassa           Bassa
               personali           possono verificarsi problemi personali che
                                   costringono a rallentare o sospendere
                                   temporaneamente il progetto di stage

    RS1        Regressioni nel     È possibile che alcune correzioni apportate        Bassa           Media
               codice              in itinere al codice creato possano far
                                   sorgere bachi nel software

    RR1        Errata              Durante l’analisi è possibile che si possano       Media            Alta
               comprensione        avere fraintendimenti sulla natura dei
               dei requisiti       requisiti da coprire e tali requisiti possono
                                   essere a loro volta studiati in modo erroneo
                                   o incompleto

3   ANALISI PREVENTIVA                                                                                          10
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    Codice     Denominazione      Descrizione                                      Probabilità      Incidenza

    RR2        Variazioni dei     Vi è la possibilità che i requisiti subiscano      Media            Alta
               requisiti          variazioni nel tempo a causa di idee
                                  proposte, novità nel dominio di
                                  applicazione o cattiva organizzazione da
                                  parte del proponente del progetto

3.2       Piano di contingenza

È stato quindi posto in essere un piano di contingenza proponente soluzioni che permettano di annullare o
mitigare quanto più possibile le conseguenze collegate ai rischi analizzati.
Il piano di contingenza è descritto in forma tabellare e riporta:
     • Il codice del rischio considerato;
     • La strategia di rilevazione di tale rischio;
     • Una serie di contromisure suggerite per la mitigazione di tale rischio.

                                    Tabella 5: Piano di contingenza dei rischi.

    Codice   Strategia di Rilevazione                            Contromisure suggerite o attuate
    RT1      Stilare un elenco delle tecnologie usate e da       In caso di conoscenza scarsa o assente di una
             usare ed effettuare una valutazione sul livello     determinata tecnologia, sarà necessario
             di conoscenza di tali tecnologie                    procedere ad una documentazione al riguardo,
                                                                 facendo uso di risorse gratuite disponibili
                                                                 on-line e comunicando strettamente con il capo
                                                                 programmatore del progetto.

    RT2      Verificare periodicamente lo stato di               Prima di ogni spostamento o chiusura dello
             manutenzione degli strumenti di lavoro e porre      strumento di lavoro, si dovrà effettuare una
             un’adeguata cura nei confronti degli stessi         push [g] sul repository GitHub messo a
                                                                 disposizione dall’azienda. Inoltre in caso di
                                                                 malfunzionamento della postazione di lavoro
                                                                 personale, l’azienda mette a disposizione una
                                                                 postazione di lavoro alternativa da cui è
                                                                 possibile proseguire il progetto di stage.

    RP1      Si dovrà avvisare il personale aziendale con        Successivamente al verificarsi del rischio, sarà
             congruo anticipo in caso di problemi personali.     necessario pianificare nuovamente il lavoro così
                                                                 da poter recuperare il tempo perso ed
                                                                 eventualmente avvisare l’Ufficio Stage della
                                                                 variazione. Nei documenti ufficiali è già stato
                                                                 posto un periodo di slack [g] di sette giorni.

    RS1      Per rilevare possibili regressioni nel codice si    Ogniqualvolta si verifica un bug, si andrà a
             farà uso di un sistema di continuous                creare un nuovo test in grado di evitare che
             integration [g]                                     tale bug sorga nuovamente senza essere notato.

3    ANALISI PREVENTIVA                                                                                          11
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    Codice   Strategia di Rilevazione                           Contromisure suggerite o attuate
    RR1      Per tutta la durata dello stage si manterrà        In caso di divergenza tra requisiti rilevati e
             contatto con i proponenti del progetto di stage    quanto richiesto dai proponenti dello stage, si
                                                                dovranno effettuare correzioni all’analisi e si
                                                                discuteranno con il proponente stesso le
                                                                strategie di mitigazione più consone.

    RR2      Per tutta la durata dello stage si manterrà        Si dovrà analizzare quali requisiti portano
             contatto con i proponenti del progetto di stage    maggior valore aggiunto al progetto esistente
                                                                ed in caso di variazioni si dovrà prontamente
                                                                discutere con il proponente per mediare una
                                                                soluzione ideale.

3.3       Analisi dell’architettura esistente

L’architettura esistente si presenta suddivisa in due parti principali, distribuite su due macchine separate:
     • Ayako: che si occupa dei calcoli e degli algoritmi;
     • Noriko: che si occupa della persistenza dei dati.
Il progetto oggetto dello stage sarà contenuto nella sua integrità all’interno di Ayako, quindi quest’ultima
parte sarà oggetto dell’analisi.
L’analisi è stata effettuata studiando il codice esistente, ponendo domande sull’architettura stessa e sulle
motivazioni delle decisioni intraprese oltre all’analisi ed esecuzione della suite di test per poter verificare lo
stato di copertura del codice.
Dall’analisi sono emerse alcune criticità che elenco qui sotto:
     • Debito tecnologico: Nonostante il software sia ancora nella forma di progetto pilota [g] , è possibile
       notare che viene fatto uso di una versione obsoleta di Django, che presenta falle di sicurezza conosciute;
       questo è dovuto a due fattori principali:
          – Uso di campi deprecati: “MoneyField”, usato in alcuni punti del progetto è un campo che non fa
             parte dei campi offerti da Django e nemmeno tra i campi mantenuti dalla comunità. Questo rende
             complessa la manutenzione e gli aggiornamenti riguardanti il modulo che offre tale campo non sono
             garantiti;
          – Uso di EAV: Il progetto correntemente fa uso di un fork [g] di Django-EAV per il supporto al
             modello di conservazione dati di tipo Entity-Value-Attributeˆ[g], oltre tutto si è inserito come
             dipendenza una precisa commit [g] di tale fork, bloccandone così gli aggiornamenti.
     • Coverage[g] falsata: Il file di configurazione di coverage era impostato in modo tale da includere file
       che a mia modesta opinione vanno a falsare la copertura del codice, tali files includono:
          – Migrazioni: che sono usate per propagare le modifiche fatte sui modelli verso lo schema di database,
             solitamente queste sono eseguite ad ogni avvio dei test, comportando una loro copertura del 100%;
          – File di configurazione: L’unico file di configurazione usato durante i test è settings_test.py,
             mentre gli altri file di configurazione (configurazione in produzione, per lo sviluppo su macchina
             virtuale, . . . ) riporteranno una copertura dello 0%;
          – I test stessi: Dato che sono eseguiti integralmente, questi files riporteranno una copertura del 100%,
             falsando la metrica.
     • Copertura dei test bassa: Dopo una riconfigurazione dell’analizzatore di copertura dei test, la
       coverage si è abbassata di 20 punti percentuali, attestandosi poco sopra il 40%, una percentuale molto
       bassa per un sistema così ampio. Ciò dimostra come piccole differenze nella configurazione di una
       componente facente parte del cruscotto informativo di un progetto possano eventualmente arrivare a
       falsare le prospettive di solidità di un sistema software;

3    ANALISI PREVENTIVA                                                                                           12
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    • Test di unità: Sembra che la maggior parte dei test vada a coprire gruppi di funzionalità, mentre i
      test di unità veri e propri sembrano essere veramente esigui;
    • Doppio front-end: Il sistema, nonostante sia in fase di progetto pilota, sembra stia già subendo una
      migrazione da un front-end basato su template [g] e view [g] Django ad un front-end basato su React,
      questo comporta la presenza di una possibilmente grande quantità di codice legacy [g] che riduce la
      manutenibilità dell’architettura;
    • Comunicazione front-end e back-end basata su polling[g] : La comunicazione tra il front-end ed
      il back-end è basata su un polling periodico del database ogni 5 secondi, questa forma di comunicazione
      può provocare rallentamenti del sistema, appesantimento del codice, difficoltà di lettura del codice stesso
      e difficoltà nel testing. Nel caso di una re-ingegnerizzazione del sistema, un’alternativa più moderna
      potrebbe essere una comunicazione basata su websockets;
    • Cattiva gestione del polling: Il front-end inizia la propria procedura di polling al caricamento
      delle componenti React e non quando strettamente necessario (ad esempio quando si è in attesa del
      completamento di un’operazione asincrona), questo provoca la creazione di traffico non necessario sulla
      rete e carico sul client a causa delle funzioni in esecuzione ad intervalli regolari. Inoltre il polling provoca
      un aggiornamento di molte componenti alla volta, a causa di Redux, appesantendo ulteriormente la
      web-app;
    • Architettura “database-centric”: Come conseguenza dell’uso di polling, è necessario fare uso di
      un sistema che consenta di memorizzare lo stato delle eventuali elaborazioni in corso; nell’architettura
      corrente il database fornisce tale funzionalità. Questo ha come conseguenza un appesantimento delle
      strutture dati, con l’aggiunta di campi che memorizzino lo stato delle elaborazioni, così da evitare di
      leggere dati parziali. Inoltre il database potrebbe essere un collo di bottiglia, limitando le prestazioni
      del sistema. Usare il database in questo modo costringe inoltre a far ricorso a test fixture [g] aggiuntive
      rendendo difficoltosa la lettura del codice. A tutto questo si aggiunge la necessità di gestire la scrittura
      su database ad ogni passaggio, aumentando gli assi di cambiamento delle componenti sviluppate, a
      discapito del principio di Single Responsibility [g] ;
    • Front-end privo di documentazione: Il front-end è stato appaltato ad un’azienda esterna, il codice
      JavaScript risulta completamente privo di commenti, estremamente complesso e senza alcun tipo di
      documentazione. Questo lo rende difficilmente ispezionabile e non è possibile fare affidamento sul team
      che ha proposto lo stage per eventuali chiarimenti su di esso;
    • Uso di metodi obsoleti nel front-end: Il front-end fa uso di una serie di metodi che sono dichiarati
      come obsoleti in fase di build [g] , questo limita la manutenibilità del front-end stesso, dato che un
      aggiornamento potrebbe portare con sé la rimozione dei metodi obsoleti usati;
    • Ciclo di build del front-end troppo lungo: Il front-end subisce una procedura di build tramite
      uno script apposito, ma ogni build richiede circa 15 minuti, a causa della gestione di tutti i file statici,
      reinstallazione tutte le dipendenze, build dei progetti collegati e costruzione di un bundle (cioè un unico
      file JavaScript contenente l’intero front-end), anche quando non necessario. Questo tempo è troppo
      lungo per uno sviluppo efficiente, soprattutto dato che il front-end non è molto esteso;
    • Uso di bundle-js: L’uso di bundle.js forza la creazione di un unico file JavaScript minificato[g] a cui
      tutto il progetto fa riferimento, questo rende il debugging estremamente complesso.

3.4     Analisi dei siti internet esplorati dal sistema

3.4.1    Criticità rilevate

Durante l’analisi dei siti web sono stati rilevate alcune criticità che potrebbero mettere in crisi un motore di
scraping automatizzato come quello oggetto del progetto di stage:
    1. Redirect [g] HTTP: Alcuni URL potrebbero portare ad una risposta del server con codici 301
       (permanentemente spostato) o 302 (ridirezione temporanea);

3   ANALISI PREVENTIVA                                                                                             13
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

     2. Redirect creati con script JavaScript: alcuni siti, invece di far uso dei redirect interni al server
        web, inseriscono una pagina contenente un solo script che forza il browser a cambiare pagina, verso un
        dominio diverso;
     3. Frame HTML [g] : contenenti componenti derivanti da un altro dominio o pagina, che potrebbero
        rendere difficoltosa l’ispezione del codice;
     4. Link diversi da ancore HTML standard: Alcuni siti fanno uso di immagini di sfondo e tag  per la costruzione di siti web, questi link potrebbero sfuggire ai motori più semplici.
Queste criticità sono state gestite nel corso del progetto, come si vedrà in seguito.

3.4.2       Estrazione dei loghi

L’idea alla base della funzionalità di estrazione dei loghi è l’uso di diverse metodologie euristiche [g] , basate sui
siti messi a disposizione dall’azienda proponente e sulla mia esperienza personale nell’uso, studio, creazione di
siti internet ed interesse nelle metodologie SEO [g] .
Qui di seguito riporto una lista ordinata delle metodologie euristiche implementate nell’architettura, ordinate
per quella che ritengo essere la loro affidabilità nel restituire un logo aziendale:
     1.   Analisi dei microdata [g] Ld+Json [1, 2]
     2.   Analisi delle Twitter Cards [3] e dei meta tag collegati;
     3.   Analisi dei tag Facebook/OpenGraph [4], anche se oramai sono considerati obsoleti;
     4.   Analisi dell’attributo id dei tag : molte aziende usano l’id “logo” (o che comunque contengono
          la parola “logo”) per identificare il proprio logo aziendale in un sito internet;
     5.   Analisi dell’attributo class dei tag : molte aziende fanno uso della class “logo” (o che
          comunque contengono la parola “logo”) per identificare il proprio logo aziendale all’interno del sito;
     6.   Analisi dei fogli stile CSS del sito: alcune aziende usano attributi id e class contenenti la parola “logo”
          all’interno di contenitori come  per poi fare uso delle proprietà background-image di CSS per
          visualizzare il logo;
     7.   Analisi dell’attributo src dei tag : molte aziende semplicemente danno al file contenente il
          logo aziendale il nome “logo”;
     8.   Analisi dell’attributo alt dei tag : alcune aziende, più raramente, inseriscono “logo” come
          descrizione testuale all’immagine del proprio logo aziendale;
     9.   Analisi dell’attributo alt dei tag : alcune aziende, seppur molto raramente, inseriscono la
          ragione sociale all’interno dell’attributo alt del proprio logo aziendale;
    10.   Analisi dei tag : questo però potrebbe restituire buone immagini (soprattutto
          con i siti più moderni che supportano loghi fino a 192x192 pixel [g] ) oppure immagini di qualità molto
          scarsa (le prime favicon [g] erano grandi 16x16 pixel).

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];

3    ANALISI PREVENTIVA                                                                                            14
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    • 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

3   ANALISI PREVENTIVA                                                                                        15
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    • CAP paese prefisso strada numero
Eventuali elementi non presenti sono stati gestiti all’interno dell’espressione, aumentando la probabilità di
trovare una corrispondenza.

3   ANALISI PREVENTIVA                                                                                    16
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

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.

4    ANALISI DEI REQUISITI                                                                                     17
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

                    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

4    ANALISI DEI REQUISITI                                                                                     18
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

                    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;

4    ANALISI DEI REQUISITI                                                                                     19
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

                     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.

4.2       Tracciamento dei requisiti

Si riportano a seguire i requisiti in dettaglio, comprensivi di tracciamento ai rispettivi casi d’uso e decisioni, i
requisiti sono classificati in forma tabellare e sono legati ad un codice così costituito:
                           R[Tipo Requisito][Priorità requisito] - [Identificativo Univoco]
Il tipo di requisito è rappresentato da uno dei seguenti codici:
     • F: Requisito Funzionale;
     • Q: Requisito di Qualità;
     • V: Requisito di Vincolo.
La priorità di un requisito è rappresentata da uno dei seguenti codici:
     • 0: Obbligatorio, necessario per considerare il progetto completato con esito positivo;
     • 1: Desiderabile, non necessario per completare con successo il progetto, ma che apporta ad esso un
       valore aggiunto notevole;
     • 2: Facoltativo, non necessario per il completamento del progetto e che apporta dei benefici limitati ad
       esso.
L’identificativo univoco avrà forma numerica, nel formato [Padre].[Figlio].[Nipote].[. . . ].

4.2.1      Requisiti Funzionali

                            Tabella 6: Tabella di tracciamento dei requisiti funzionali

    ID            Descrizione                                                        Fonti             Stato
    RF0 - 1       Il sistema deve effettuare lo scraping di dati anagrafici da       UC1,           Soddisfatto
                  Google Places API.                                                 UC3

    RF0 - 1.1     Il sistema deve ricercare una ragione sociale su Google Places     UC1,           Soddisfatto
                  API in maniera diretta.                                            UC3

    RF0 - 1.2     Il sistema deve ricercare una ragione sociale su Google Places     UC1,           Soddisfatto
                  API tramite ricerca fuzzy [g] .                                    UC3

    RF0 - 1.3     Il sistema deve ricavare dati dettagliati sull’azienda cercata     UC1,           Soddisfatto
                  da Google Places API.                                              UC3

4    ANALISI DEI REQUISITI                                                                                        20
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    ID            Descrizione                                                        Fonti     Stato
    RF0 - 1.3.1   Il sistema deve ricavare l’indirizzo dell’azienda cercata su       UC1,    Soddisfatto
                  Google Places API.                                                 UC3

    RF0 - 1.3.2   Il sistema deve ricavare le coordinate geografiche dell’azienda    UC1,    Soddisfatto
                  cercata su Google Places API.                                      UC3

    RF0 - 1.3.3   Il sistema deve ricavare l’URL del sito web dell’azienda           UC1,    Soddisfatto
                  cercata su Google Places API.                                      UC3

    RF0 - 1.3.4   Il sistema deve ricavare il nome dell’azienda trovato su           UC1,    Soddisfatto
                  Google Places API.                                                 UC3

    RF0 - 1.3.5   Il sistema deve ricavare il “Place ID” di Google Places API        UC1,    Soddisfatto
                  per l’azienda cercata.                                             UC3

    RF0 - 1.3.6   Il sistema deve ricavare le categorie di cui l’azienda cercata     UC1,    Soddisfatto
                  su Google Places API fa parte.                                     UC3

    RF0 - 1.4     Il sistema deve essere in grado di salvare i dati ricavati da      UC1,    Soddisfatto
                  Google Places nel database                                         UC3

    RF0 - 2       Il sistema deve cercare il logo dell’azienda cercata,              UC1,    Soddisfatto
                  analizzando il sito web aziendale                                  UC3

    RF0 - 2.1     Il sistema deve cercare il logo dell’azienda analizzando i fogli   UC1,    Soddisfatto
                  stile CSS del sito web aziendale                                   UC3

    RF0 - 2.2     Il sistema deve cercare il logo dell’azienda analizzando           UC1,    Soddisfatto
                  l’attributo alt dei tag , nel caso questi                 UC3
                  contengano la ragione sociale dell’azienda (fuzzy search)

    RF0 - 2.3     Il sistema deve cercare il logo dell’azienda analizzando           UC1,    Soddisfatto
                  l’attributo alt dei tag , nel caso questi                 UC3
                  contengano la parola “logo”

    RF0 - 2.4     Il sistema deve cercare il logo aziendale analizzando              UC1,    Soddisfatto
                  l’attributo class dei tag , nel caso questi               UC3
                  contengano la parola “logo”

    RF0 - 2.5     Il sistema deve cercare il logo aziendale analizzando              UC1,    Soddisfatto
                  l’attributo id dei tag , nel caso contengano la           UC3
                  parola “logo”

    RF0 - 2.6     Il sistema deve cercare il logo aziendale analizzando              UC1,    Soddisfatto
                  l’attributo src dei tag , nel caso il nome del file       UC3
                  contenga la parola “logo”

    RF0 - 2.7     Il sistema deve cercare il logo aziendale analizzando i            UC1,    Soddisfatto
                  microdata Ld+JSON del sito web aziendale alla ricerca del          UC3
                  campo “logo”

4    ANALISI DEI REQUISITI                                                                                 21
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    ID            Descrizione                                                         Fonti     Stato

    RF0 - 2.8     Il sistema deve cercare il logo aziendale analizzando i meta        UC1,    Soddisfatto
                  tag Facebook/OpenGraph del sito web aziendale                       UC3

    RF0 - 2.9     Il sistema deve cercare il logo aziendale analizzando i meta        UC1,    Soddisfatto
                  tag Twitter del sito web aziendale                                  UC3

    RF0 - 2.10    Il sistema deve cercare il logo aziendale analizzando la            UC1,    Soddisfatto
                  favicon del sito web aziendale                                      UC3

    RF0 - 2.11    Il sistema deve essere in grado di salvare il logo aziendale        UC1,    Soddisfatto
                  trovato su disco                                                    UC3

    RF0 - 2.12    Il sistema deve essere in grado di salvare il percorso del logo     UC1,    Soddisfatto
                  scaricato nel database                                              UC3

    RF0 - 3       Il sistema deve ricavare dati anagrafici testuali dal sito web      UC1,    Soddisfatto
                  aziendale                                                           UC3

    RF0 - 3.1     Il sistema deve analizzare il file robots.txt per cercare una       UC1,    Soddisfatto
                  possibile sitemap XML del sito web aziendale                        UC3

    RF0 - 3.2     Il sistema deve analizzare la sitemap XML del sito web              UC1,    Soddisfatto
                  aziendale alla ricerca di una pagina contatti                       UC3

    RF0 - 3.2.1   Il sistema deve essere in grado di gestire sitemap XML              UC1,    Soddisfatto
                  annidate all’interno di altre sitemap XML                           UC3

    RF0 - 3.3     Il sistema deve essere in grado di effettuare un crawling [g] del   UC1,    Soddisfatto
                  sito web alla ricerca di una pagina contatti                        UC3

    RF0 - 3.3.1   Il sistema deve essere in grado di rispettare i limiti al           UC1,    Soddisfatto
                  crawling imposti dal file robots.txt                                UC3

    RF0 - 3.4     Il sistema deve essere in grado di ricavare indirizzi email dal     UC1,    Soddisfatto
                  sito web aziendale                                                  UC3

    RF0 - 3.5     Il sistema deve essere in grado di ricavare indirizzi geografici    UC1,    Soddisfatto
                  dal sito web aziendale                                              UC3

    RF0 - 3.6     Il sistema deve essere in grado di ricavare numeri di telefono      UC1,    Soddisfatto
                  dal sito web aziendale                                              UC3

    RF0 - 3.7     Il sistema deve essere in grado di ricavare numeri di partita       UC1,    Soddisfatto
                  IVA dal sito web aziendale                                          UC3

    RF0 - 3.8     Il sistema deve essere in grado di ricavare indirizzi ai social     UC1,    Soddisfatto
                  media [g] dal sito web aziendale                                    UC3

4    ANALISI DEI REQUISITI                                                                                  22
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    ID          Descrizione                                                         Fonti          Stato
    RF0 - 3.9   Il sistema deve essere in grado di salvare i dati ricavati dai      UC1,        Soddisfatto
                siti web in database                                                UC3

    RF0 - 4     Il sistema deve mettere a disposizione una componente               UC1,        Soddisfatto
                front-end per l’utente                                              UC3

    RF0 - 4.1   Il sistema deve mettere a disposizione dell’utente un pulsante      UC1,        Soddisfatto
                per avviare la procedura di scraping                                UC3

    RF0 - 4.2   Il sistema deve mettere a disposizione dell’utente un pulsante      UC3         Soddisfatto
                per riavviare una procedura di scraping già completata

    RF0 - 4.3   Il sistema deve mettere a disposizione dell’utente un pulsante      UC2         Soddisfatto
                per visualizzare i risultati di uno scraping già eseguito

    RF0 - 4.4   Il sistema deve visualizzare all’utente una finestra modale         UC2         Soddisfatto
                contenente i risultati dello scraping effettuato

    RF0 - 5     Il sistema deve mettere a disposizione un pannello                  Decisione   Soddisfatto
                amministrativo per la gestione dei modelli di database              Interna

    RF1 - 1     Il sistema deve essere in grado di scaricare gli omonimi            UC4,        Soddisfatto
                catastali dal catasto nazionale                                     UC7

    RF1 - 2     Il sistema deve mettere a disposizione dell’utente la               UC5         Parzialmente
                possibilità di scegliere di quale quale omonimo catastale                        Soddisfatto
                vuole fare lo scraping

    RF1 - 3     Il sistema deve essere in grado di scaricare i dati catastali di    UC6         Soddisfatto
                un omonimo scelto

    RF1 - 3.1   Il sistema deve essere in grado di scaricare i dati presenti        UC6         Soddisfatto
                nelle tabelle del sito dell’Agenzia delle Entrate, contenenti
                informazioni limitate sugli edifici cercati

    RF1 - 3.2   Il sistema deve essere in grado di scaricare fogli XML              UC6            Non
                contenenti le visure catastali degli edifici cercati                            Soddisfatto

    RF1 - 3.3   Il sistema deve essere in grado di estrarre il Foglio XML dai       UC6         Parzialmente
                documenti firmati p7m scaricati dall’Agenzia delle entrate                       Soddisfatto

    RF1 - 3.4   Il sistema deve essere in grado di salvare i dati estratti dalle    UC6         Soddisfatto
                tabelle del catasto in database

    RF1 - 3.5   Il sistema deve essere in grado di salvare i dati estratti dai      UC6            Non
                file XML del catasto in database                                                Soddisfatto

    RF1 - 4     Il sistema deve essere in grado di visualizzare i risultati dello   UC6            Non
                scraping del catasto in una finestra modale                                     Soddisfatto

4    ANALISI DEI REQUISITI                                                                                     23
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

    ID          Descrizione                                                     Fonti           Stato
    RF1 - 5     Il sistema deve mettere a disposizione dell’utente la           UC7          Parzialmente
                possibilità di riavviare uno scraping dal catasto già                         Soddisfatto
                completato

    RF1 - 6     Il sistema deve poter salvare un’immagine della home page [g]   UC1,         Soddisfatto
                del sito web aziendale                                          UC3

    RF1 - 6.1   Il sistema deve poter salvare un’immagine della home page       UC1,         Soddisfatto
                del sito web aziendale su disco                                 UC3

    RF1 - 6.2   Il sistema deve poter salvare il percorso dell’immagine della   UC1,         Soddisfatto
                home page del sito web aziendale scaricata all’interno del      UC3
                database

4.2.2    Requisiti di Qualità

                         Tabella 7: Tabella di tracciamento dei requisiti di qualità

    ID          Descrizione                                                     Fonti           Stato
    RQ0 - 1     Ogni componente dello scraping da Google Places API deve        Piano di     Soddisfatto
                essere coperta da test automatici di unità                      Lavoro

    RQ0 - 2     Ogni componente dello scraping dal sito web aziendale deve      Piano di     Soddisfatto
                essere coperta da test automatici di unità                      Lavoro

    RQ1 - 1     Ogni componente deve contenere al proprio interno dei           Decisione    Soddisfatto
                commenti di documentazione in stile PyDoc                       Interna

    RQ1 - 2     La copertura del codice da parte dei test deve essere           Decisione    Soddisfatto
                superiore al 75%                                                Interna

    RQ2 - 1     Ogni componente dello scraper del catasto deve essere           Piano di        Non
                coperto da test automatici di unità                             Lavoro       Soddisfatto

    RQ2 - 2     Ogni componente deve essere coperta da test automatici di       Piano di     Parzialmente
                integrazione                                                    Lavoro        Soddisfatto

    RQ2 - 3     I test automatici del sistema creato devono integrarsi nella    Piano di     Soddisfatto
                suite di test esistente in Ayako                                Lavoro

4    ANALISI DEI REQUISITI                                                                                  24
Sviluppo di strumenti di web scraping per il miglioramento dei processi di data enrichment

4.2.3     Requisiti di Vincolo

                          Tabella 8: Tabella di tracciamento dei requisiti di vincolo

    ID            Descrizione                                                      Fonti         Stato
    RV0 - 1       Il sistema deve mettere a disposizione degli endpoint [g] REST   Piano di    Soddisfatto
                  per il web scraper                                               Lavoro

    RV0 - 1.1     Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  un sottoinsieme delle normali operazioni CRUD [g] sui            Lavoro
                  risultati dello scraping tramite UUID [g]

    RV0 - 1.1.1   Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  il recupero dei risultati dello scraping tramite UUID            Lavoro

    RV0 - 1.1.2   Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  la cancellazione dei risultati dello scraping tramite UUID       Lavoro

    RV0 - 1.1.3   Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  l’aggiornamento manuale dei risultati dello scraping tramite     Lavoro
                  UUID

    RV0 - 1.2     Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  un sottoinsieme delle normali operazioni CRUD [g] sui            Lavoro
                  risultati dello scraping tramite UUID del cliente

    RV0 - 1.2.1   Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  il recupero dei risultati tramite UUID del cliente               Lavoro

    RV0 - 1.2.2   Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  la cancellazione dei risultati tramite UUID del cliente          Lavoro

    RV0 - 1.3     Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  l’avvio della procedura di scraping tramite UUID del cliente     Lavoro
                  da ricercare

    RV0 - 2       L’architettura deve essere costruita facendo uso di Python 3.5   Decisione   Soddisfatto
                                                                                   Interna

    RV0 - 3       L’architettura deve essere costruita facendo uso di Django 1.9   Decisione   Soddisfatto
                                                                                   Interna

    RV1 - 1       Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  l’avvio della procedura di scraping degli omonimi catastali,     Lavoro
                  data la ragione sociale

    RV1 - 2       Il sistema deve mettere a disposizione un endpoint REST per      Piano di    Soddisfatto
                  il recupero degli omonimi catastali scaricati, data la ragione   Lavoro
                  sociale

4    ANALISI DEI REQUISITI                                                                                   25
Puoi anche leggere