[gl-como] Automatizzami il web col serpentone

Fabio fabrix.xm@gmail.com
Sab 4 Giu 2016 09:57:16 CEST


Oilà

Questa è la mail che avrei dovuto scrivere la settimana scorsa. Come 
si dice, meglio tardi che mai.

Giovedì 26 maggio abbiamo visto come usare python per recuperare 
informazioni in automatico da una pagina web.
In particolare abbiamo deciso di estrarre l'elenco delle notizie in 
prima pagina su Hacker News[0]

Per fare cio', abbiamo usato due librerie python molto utili:

- Requests[1], per fare richieste HTTP
- BeautifulSoup[2], per estrarre i dati dalle pagine html

Usiamo BeautifulSoup perchè:

- le pagine html non sono xml valido, per cui un parser xml standard 
fallirebbe miseramente
- le espressioni regolari _non si usano_ per fare il parsing di html[3]
- ha un bel nome

Il codice del nostro piccolo esperimento lo trovate qui

http://codepad.org/FtEd8EO2

Per evitare di fare mille richieste inutili a 
https://news.ycombinator.com/ mentre testavamo lo script, abbiamo usato 
firefox per salvare la pagina in un file locale. Per utilizzare i dati 
"live" basta togliere il commento dalle righe 6-7 e commentare 9-10.

C'è da notare come il nostro codice non controlli nessun tipo di 
errore: per semplicità si assume che la richiesta della homepage al 
server ritorni sempre senza errori. Si lascia al lettore il compito di 
completare questa parte.

Nel nostro esempio abbiamo usato BeautifulSoup 4, alcune distro hanno 
nei repo la versione 3. Per ovviare a questo problema, possiamo usare 
virtualenv.

Virtualenv crea una struttura di cartelle in una posizione definita 
dall'utente, che continene tutto quello che serve a python per 
funzionare e che permette di installare pacchetti python localmente, 
senza interessare il sistema, e senza richiedere i permessi di root.

1. si installa virtualenv dal gestore di pacchetti.
2. creiamo una cartella per i nostri test

    ~$ mkdir pyglcomo
    ~$ cd pyglcomo

3. creiamo l'ambiente python virtuale. Il comando 'virtualenv' richiede 
il nome della cartella in cui verrà creato l'ambiente. Qui diamo 
'franco', come esempio.

    pyglcomo$ virtualenv franco
    Using base prefix '/usr'
    New python executable in /home/fabio/pyglcomo/franco/bin/python3
    Also creating executable in /home/fabio/pyglcomo/franco/bin/python
    Installing setuptools, pip, wheel...done.

Ed ecco che virtualenv ha creato la cartella 'franco' e ci ha messo 
dentro tutto quello che serve a python per funzionare, compreso 
l'eseguibile python.

4. attiviamo il virtualenv

   pyglcomo$ source franco/bin/activate
   (franco) pyglcomo$

Abbiamo attivato il virtualenv, il prompt di bash è stato modificato e 
visualizza il nome del virtualenv attivo (franco).
Lo script "activate" aggiunge la cartella "franco/bin" al PATH e 
imposta alcune variabili d'ambiente per far si che l'interprete python 
lanciato da quel prompt cerchi le librerie all'interno della cartella 
"franco".

    (franco) pyglcomo$ which python
    /home/fabio/pyglcomo/franco/bin/python

5. installiamo requests e BeautifulSoup

    (franco) pyglcomo$ pip install requests beautifulsoup4

a questo punto salvato lo script di esempio in ~/pyglcomo , lo possiamo 
eseguire.
Per uscire dal virtualenv, il comando è "deactivate". Se chiudete il 
terminale, il virtualenv viene disattivato.
Ricordate di riattivarlo quando vi serve...


_0: https://news.ycombinator.com/
_1: http://python-requests.org
_2: https://www.crummy.com/software/BeautifulSoup/bs4/doc/
_3: https://blog.codinghorror.com/parsing-html-the-cthulhu-way/



Maggiori informazioni sulla lista gl-como