Materiale di preparazione al workshop sul web scraping per il festival di Unit "Connessioni caotiche" - https://wiki.unit.macaomilano.org/ConnessioniCaotiche2017
Go to file
notisset 47f68fab98 Update 'README.md' 2017-11-10 00:00:32 +01:00
README.md Update 'README.md' 2017-11-10 00:00:32 +01:00

README.md

Anche i robot navigano il web

~web scraping, estrarre informazioni da Internet~

intro

  • cosa c'e' sull'internet
    • informazioni
    • risorse
    • servizi
  • web vs web browser
    • analisi di una richiesta HTTP
    • dimostrazione con cUrl
  • estrazione
    • superficie: panoramica possibili utilizzi
    • tecniche
    • ostacoli e limitazioni
      • tecnico-pratiche
      • legali*
  • inserimento
    • superficie: panoramica possibili utilizzi
    • tecniche e ostacoli come da estrazione
  • motivazioni
    • pratiche
      • reperibilita' offline
      • far sopravvivere la fruizione ai provider attuali dei contenuti
      • costruzione di soluzioni utente-centriche
    • politiche
      • liberare le informazioni
    • artistiche
      • manipolare le informazioni per caricarle di altro significato

(*) need halp

pratica 1: cUrl

(?)pratica 1.5: greasemonkey

pratica 2: scrapy

pratica 3: PhantomJs/CasperJs

(???)pratica 4: selenium/watir

tbd: obiettivi scraping per workshop


#cosa c'e' sull'internet

  • informazioni
  • servizi
  • persone che ne fruiscono

Informazioni

Le informazioni descrivono la realta' in cui viviamo e sono la base su cui prendiamo delle decisioni. Sono facili da quantificare. Sono facili da manipolare.

Tipi di informazione che si trova sull' internet

(in ordine dalla piu' alla meno rara)

  • edita o elaborata (libri, film, tracce musicali, articoli di un blog) - alto valore intrinseco.
  • non elaborata (informazioni metereologiche, post su facebook, indirizzo e recapito di una attività commerciale) - basso valore intrinseco.
  • metainformazione - (log di un server web/DNS) - valore intrinseco nullo

Manipolazione

La manipolazione dell'informazione la carica di valore, la spiega, la rende fruibile. Invormazioni di tipo diverso necessitano tipi diversi di manipolazione per acquistare valore intrinseco.

Ad esempio un log di Apache (server web):

64.242.88.10 - - [07/Mar/2004:16:05:49 -0800] "GET /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables HTTP/1.1" 401 12846

per assumere significato deve essere contestualizzato con altre informazioni su:

  • utente a cui corrisponde l'indirizzo IP
  • contenuti a cui corrisponde il percorso
  • altri log a cui associarlo per riprodurre la history di navigazione dell'utente

Manipolare l'informazione

*storiella: Giangiorgino si sveglia tutte le mattine per andare a prendere lo stesso treno che -di tanto in tanto- non arriva alla stazione per l'orario previsto. Quando questo succede Giangiorgino deve correre per prendere un autobus e due tram se vuole sperare di arrivare a destinazione entro la stessa ora -cosa che solitamente non riesce a fare-. Giangiorgino, pensandoci su, capisce di avere le seguenti opzioni:

  • svegliarsi mezz'ora prima ogni giorno
  • scaricare l'ultima App Trenissimissimo che gli invia ogni ora di ogni giorno notifiche in tempo reale sullo stato dei 36 treni circolanti sulla tratta
  • manipolare l'informazione* - scrivere un programma che ogni giorno decide sulla base dello stato dei treni l'ora a cui puntare la sveglia

Ecco quindi che il processo ripetitivo di:

  • a una data ora visitare il sito trenissimissimo.com
  • verificare lo stato di percorrenza del treno
  • scegliere il percorso ottimale
  • fissare la sveglia di conseguenza

Può essere facilmente delegato a un bot, un processo che una volta avviato è in grado di proseguire la sua esecuzione senza l'intervento di un umano.

Per fare questo è necessario individuare le risorse accessibili tramite la rete che rendano disponibile, in formato più o meno elaborato le informazioni sullo stato dei treni in circolazione. (Giangiorgino ha già controllato, il sito trenissimissimo.com fornisce questo servizio)

Di seguito vedremo alcune delle tecniche che possiamo utilizzare per crearne uno.

####Prerequisiti

  • python con i seguenti moduli installati
    • requests
    • beautiful soup (bs4)

Il sito da cui andremo ad estrarre le informazioni e' il seguente:

http://viaggiatreno.it/vt_pax_internet/mobile

####Esecuzione

Il punto di partenza e' quindi creare un nuovo file che chiameremo scraper.py con il seguente contenuto:

#! /usr/bin/env python
import requests


headers = requests.utils.default_headers()
headers.update({"User-Agent": "Mozilla/5.0"})

r = requests.get('http://viaggiatreno.it/vt_pax_internet/mobile', headers=headers)

print(r.text)