From f5504396849b8a978c6b1717fd542ebb05674612 Mon Sep 17 00:00:00 2001 From: notisset Date: Fri, 10 Nov 2017 00:40:16 +0100 Subject: [PATCH] Update 'README.md' --- README.md | 113 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index 1efdbac..11a549d 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,7 @@ # 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 +##cosa c'e' sull'internet - informazioni - servizi @@ -98,27 +53,75 @@ Per fare questo รจ necessario individuare le risorse accessibili tramite la rete 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``` +Possiamo quindi iniziare a navigarlo tramite un browser (preferibilmente firefox o chromium/chrome) per farci un idea sul suo funzionamento. E' molto utile in questa fase usare gli strumenti inclusi nel browser come + +Il network monitor di firefox: +https://developer.mozilla.org/it/docs/Tools/Network_Monitor + +Oppure l'equivalente per Chrome: +https://developers.google.com/web/tools/chrome-devtools/network-performance/resource-loading + + + +####Prerequisiti + +- python ~2.7 con i seguenti moduli installati *(durante il workshop vi aiuteremo durante l'installazione)* + - ```requests``` che ci permette di gestire le chiamate HTTP[s] e di estrarne il codice HTML + - ```beautifulsoup``` (bs4) che ci permette di operare selezioni all'interno del codice estratto + + +####Documentazione + +http://docs.python-requests.org/en/master/ +https://www.crummy.com/software/BeautifulSoup/bs4/doc/ + + ####Esecuzione Il punto di partenza e' quindi creare un nuovo file che chiameremo `scraper.py` con il seguente contenuto: - #! /usr/bin/env python + # importiamo il modulo requests import requests + + # modifichiamo gli header in modo da simulare una richiesta proveniente da un browser web (in questo caso firefox) per evitare possibili ban + headers = requests.utils.default_headers() + headers.update({"User-Agent": "Mozilla/5.0"}) + + # effettuiamo la richiesta + r = requests.get('http://viaggiatreno.it/vt_pax_internet/mobile', headers=headers) + + # stampiamo il risultato + print(r.text) + +salviamo il file ed eseguiamolo: + + $ python scraper.py + +in modo da vedere il codice html estratto dalla pagina. + +Una volta fatto questo torniamo sul sito ed effettuiamo una ricerca per stazione, tenendo aperto il network monitor del browser. Dopodiche', cerceremo di riprodurre la stessa ricerca utilizzando python: + + #! /usr/bin/env python + import requests + from bs4 import BeautifulSoup headers = requests.utils.default_headers() headers.update({"User-Agent": "Mozilla/5.0"}) - r = requests.get('http://viaggiatreno.it/vt_pax_internet/mobile', headers=headers) + data = { + + 'codiceStazione': 'S01700Milano+Centrale', + 'lang': 'IT', + } + + r = requests.post('http://viaggiatreno.it/vt_pax_internet/mobile/stazione', headers=headers, data=data) + + print(r.text.encode('utf-8')) + + - print(r.text) \ No newline at end of file