web-scraping-caotico/README.md

124 lines
4.4 KiB
Markdown
Raw Normal View History

2017-11-07 00:07:22 +01:00
# Anche i robot navigano il web
2017-11-07 00:13:55 +01:00
~web scraping, estrarre informazioni da Internet~
2017-10-03 00:56:56 +02:00
## intro
2017-11-07 00:07:22 +01:00
- cosa c'e' sull'internet
- informazioni
- risorse
- servizi
2017-10-03 00:56:56 +02:00
- web vs web browser
- analisi di una richiesta HTTP
- dimostrazione con cUrl
- estrazione
2017-10-03 01:02:08 +02:00
- superficie: panoramica possibili utilizzi
2017-10-03 00:56:56 +02:00
- tecniche
- ostacoli e limitazioni
- tecnico-pratiche
- legali*
- inserimento
2017-10-03 01:02:08 +02:00
- superficie: panoramica possibili utilizzi
2017-10-03 00:56:56 +02:00
- 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
2017-10-03 01:02:08 +02:00
2017-10-03 00:56:56 +02:00
## pratica 1: cUrl
## (?)pratica 1.5: greasemonkey
## pratica 2: scrapy
## pratica 3: PhantomJs/CasperJs
2017-10-03 01:02:08 +02:00
## (???)pratica 4: selenium/watir
2017-11-07 00:07:22 +01:00
**tbd: obiettivi scraping per workshop**
___
#cosa c'e' sull'internet
- informazioni
- servizi
- persone che ne fruiscono
2017-11-07 00:13:55 +01:00
### Informazioni
2017-11-07 00:07:22 +01:00
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.
2017-11-07 00:13:55 +01:00
#### Tipi di informazione che si trova sull' internet
2017-11-07 00:07:22 +01:00
(in ordine dalla piu' alla meno rara)
2017-11-08 23:05:47 +01:00
- edita o elaborata (libri, film, tracce musicali, articoli di un blog) - alto valore intrinseco.
2017-11-09 00:52:47 +01:00
- non elaborata (informazioni metereologiche, post su facebook, indirizzo e recapito di una attività commerciale) - basso valore intrinseco.
2017-11-08 23:05:47 +01:00
- metainformazione - (log di un server web/DNS) - valore intrinseco nullo
#### Manipolazione
2017-11-10 00:00:32 +01:00
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.
2017-11-08 23:05:47 +01:00
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
2017-11-07 00:07:22 +01:00
2017-11-07 00:13:55 +01:00
### Manipolare l'informazione
2017-11-10 00:00:32 +01:00
*storiella:
2017-11-07 00:07:22 +01:00
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
2017-11-10 00:00:32 +01:00
- **manipolare l'informazione*** - scrivere un programma che ogni giorno decide sulla base dello stato dei treni l'ora a cui puntare la sveglia
2017-11-08 00:03:01 +01:00
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
2017-11-09 20:27:49 +01:00
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.
2017-11-08 00:03:01 +01:00
2017-11-09 20:41:12 +01:00
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)
2017-11-09 20:38:28 +01:00
2017-11-09 20:27:49 +01:00
Di seguito vedremo alcune delle tecniche che possiamo utilizzare per crearne uno.
2017-11-10 00:00:32 +01:00
####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)