Differences between revisions 10 and 17 (spanning 7 versions)
Revision 10 as of 2017-03-14 10:02:53
Size: 2064
Editor: uid
Comment:
Revision 17 as of 2017-03-18 01:13:13
Size: 3061
Editor: subnixr
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
La Cultura è la nostra Natura, siamo cacciatori e raccoglitori in un mondo di dati. La Cultura è la nostra Natura, siamo cacciatori e raccoglitori in un mondo di informazione.
Line 29: Line 29:
 * https://deshmukhsuraj.wordpress.com/2015/03/08/anonymous-web-scraping-using-python-and-tor/
Line 39: Line 40:
curl "http://www.example.com" > out.html curl -o out.html "http://www.example.com"
Line 41: Line 42:
ora l'output viene reindirizzato sul file ''out.html'' ora l'output è salvato sul file ''out.html''
Line 66: Line 67:
 * Stampa l'elenco degli spazi di Macao:
 {{{#!highlight python3

===
Scraping ===
Stampa l'elenco degli spazi di Macao:
{{{#!highlight python3
Line 84: Line 87:
 * Fake user-agent:
 {{{#!highlight python3
Stesso raccolto, ma con XPath :)
{{{#!highlight python3
#!/usr/bin/env python
from lxml import html
from io import BytesIO
import requests as reqs


# FF XPath Plugin:
# https://addons.mozilla.org/en-US/firefox/addon/xpath-checker/


url = "http://macaomilano.org/spip.php?rubrique18"
r = reqs.get(url)
doc = html.parse(BytesIO(r.content))
titles = doc.xpath("id('container')/div/section/header/h2/a/span/text()")
for t in titles:
    print(t)

}}}

=== Fake user-agent ===
{{{#!highlight python3
Line 91: Line 115:

=== Getting nasty ===
Passare per Tor:
{{{#!highlight python3
import socks
import socket
import requests

# Prima
print(requests.get("http://icanhazip.com").text)

socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5,
                      addr="127.0.0.1",
                      port=9050)

socket.socket = socks.socksocket

# Dopo
print(requests.get("http://icanhazip.com").text)
}}}

Costruzione Utensili

La Cultura è la nostra Natura, siamo cacciatori e raccoglitori in un mondo di informazione.

Prerequisiti

  • Un'idea vaga di HTML
  • Saper scrivere, o anche solo leggere un qualsiasi linguaggio

Programma

Serie di pomeriggi di sperimentazione libera, segue workshop rivolto al pubblico.

Temi

Ancora da definire, ma a grandi linee:

  • Orientarsi con l'inspector del Browser
  • Rudimenti di web scraping con Python:
    • GET e fake-user agent con requests
    • Beautiful-soup e/o lxml per il parsing delle pagine
    • Web spider con scrapy
  • wget e qualcosa di bash?

Riferimenti Sparsi

Terminale

curl

curl "http://www.example.com"

esegue una GET e ne stampa l'output

curl -o out.html "http://www.example.com"

ora l'output è salvato sul file out.html

wget

wget "http://www.example.com/index.html"

salva in contenuto in index.html

wget -r "http://www.example.com/"

salva tutto il contenuto del sito nella directory corrente

Python

python3 script.py

esegue uno script

python3 script.py > out.txt

esegue uno script e ne salva l'output in out.txt

Codice

Scraping

Stampa l'elenco degli spazi di Macao:

   1 #!/usr/bin/env python3
   2 import requests
   3 from bs4 import BeautifulSoup
   4 
   5 url = "http://www.macaomilano.org/spip.php?rubrique18"
   6 r = requests.get(url)
   7 page = r.text
   8 
   9 soup = BeautifulSoup(page, "html.parser")
  10 
  11 h2s = soup.findAll("h2")
  12 spazi = [h2.text for h2 in h2s]
  13 
  14 print("\n".join(spazi))

Stesso raccolto, ma con XPath :)

   1 #!/usr/bin/env python
   2 from lxml import html
   3 from io import BytesIO
   4 import requests as reqs
   5 
   6 
   7 # FF XPath Plugin:
   8 # https://addons.mozilla.org/en-US/firefox/addon/xpath-checker/
   9 
  10 
  11 url = "http://macaomilano.org/spip.php?rubrique18"
  12 r = reqs.get(url)
  13 doc = html.parse(BytesIO(r.content))
  14 titles = doc.xpath("id('container')/div/section/header/h2/a/span/text()")
  15 for t in titles:
  16     print(t)

Fake user-agent

   1 headers = requests.utils.default_headers()
   2 headers.update({"User-Agent": "Mozilla/5.0"})
   3 
   4 r = requests.get(url, headers=headers)

Getting nasty

Passare per Tor:

   1 import socks
   2 import socket
   3 import requests
   4 
   5 # Prima
   6 print(requests.get("http://icanhazip.com").text)
   7 
   8 socks.setdefaultproxy(proxy_type=socks.PROXY_TYPE_SOCKS5,
   9                       addr="127.0.0.1",
  10                       port=9050)
  11 
  12 socket.socket = socks.socksocket
  13 
  14 # Dopo
  15 print(requests.get("http://icanhazip.com").text)

CostruzioneUtensili (last edited 2017-03-18 01:13:13 by subnixr)