[gl-como] R: Automatizzami il web col serpentone
danielefigini@alice.it
danielefigini@alice.it
Sab 4 Giu 2016 11:05:43 CEST
Meglio tordi, che mais.
Daniele
----Messaggio originale----
Da: fabrix.xm@gmail.com
Data: 4-giu-2016 9.57
A: "Gruppo Linux Como"<gl-como@lists.linux.it>
Ogg: [gl-como] Automatizzami il web col serpentone
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/
--
Mailing list info: https://lists.linux.it/listinfo/gl-como
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.linux.it/pipermail/gl-como/attachments/20160604/df9958d4/attachment.html>
Maggiori informazioni sulla lista
gl-como