Ciao a tutti e benvenuti in questo post dove vi mostro come fare lo scraping di una pagina web usando un semplice codice python che fa uso di una libreria chiamata BeautifulSoup.
Che cos’è il web scraping
Prima di tutto vediamo che cosa si intende con il termine “web scraping”. Il web scraping è una tecnica che consiste nell’estrazione di informazioni da una pagina web in maniera automatizzata. Questo può essere fatto sia attraverso un software o con un linguaggio di programmazione. Oggi vediamo come fare lo scraping con il linguaggio di programmazione Python.
Come installare BeautifulSoup
Per questa guida andremo ad utilizzare una libreria per il web scraping chiamata BeautifulSoup, ma esistono librerie alternative che possono essere utilizzate (per esempio scrappy). Inoltre, per seguire questa guida dovrete installare anche la libreria “requests” che serve per eseguire richieste HTTP attraverso codice Python.
pip install beautifulsoup4
Mentre per installare requests:
pip install requests
Come ottenere il contenuto di una pagine HTML attraverso codice Python
import requests
r = requests.get("https://www.ilmeteo.it/meteo/Roma")
print(len(r.text))
Come prima cosa importiamo la libreria requests, poi eseguiamo un richiesta GET per l’url contenente le previsioni meteo per Roma. Poi possiamo stampare il numero dei caratteri che sono presenti nel codice HTML della risposta del server di ilmeteo.it
Ora vediamo come ottenere informazioni dalla pagine HTML con codice Python.
Nel codice in basso andiamo ad ottenere il titolo della pagina web:
import requests
from bs4 import BeautifulSoup as bs
r = requests.get("https://www.ilmeteo.it/meteo/Roma")
contenuto = bs(r.text)
print(contenuto.title)
print(contenuto.title.string)
Se eseguiamo questo codice, vedremo in output nella console il seguente contenuto:
<title>Meteo Per ROMA ▷ Previsioni Fino a 15 giorni » ILMETEO.it</title>
Meteo Per ROMA ▷ Previsioni Fino a 15 giorni » ILMETEO.it
Come vedete per ottenere l’intero tag HTML possiamo utilizzare la proprietà title e per ottenere solamente il testo all’interno del tag dobbiamo accedere alla proprietà string del tag
Possiamo anche ottenere paragrafi e link della pagina web. Per esempio nella seguente maniera:
print(contenuto.p)
print(contenuto.a)
Come ottenere un attributo di un tag HTML con Python e BeautifulSoup
Se invece vogliamo accedere ad un attributo specifico di un tag HTML, possiamo specificare l’attributo tra parentesi quadre nel seguente modo:print(contenuto.a["href"])
Il codice in alto server per ottenere l’attributo href da un tag di link HTML.
Fino ad ora abbiamo visto solamente come ottenere un solo tag alla volta. Il codice in alto infatti ci trova solamente il primo paragrafo o primo link nella pagina web. Vediamo invece come ottenere tutti i tag di una pagina web.
Web scraping: Come ottenere un lista dei tag HTML con Python e BeautifulSoup
Per ottenere tutti i tag HTML di una pagina web sotto forma di lista python possiamo usare la funzione findAll()for link in contenuto.findAll("a"):
print(link.get("href"))
in output vedremo tutti i link presenti nella pagina.
Ora vediamo come ottenere un dato specifico da una pagina. Nella maggior parte dei casi vogliamo ottenere un dato proveniente da un tag specifico che abbia un id o classe specifica. Dopo aver ispezionato il sito di ilmeteo.it possiamo vedere che le temperature della settimana sono presente all’interno di un tag “span” con classe = “temps”
Vediamo quindi come ottenere il contenuto di tutti i tag con una certa classe con Python e BeautifulSoup:
Web scraping: Come ottenere tutti i tag con classe specifica con Python
Ecco il codice per eseguire questa task:import requests from bs4 import BeautifulSoup as bs r = requests.get("https://www.ilmeteo.it/meteo/Roma") contenuto = bs(r.text) temps = contenuto.findAll("span", {"class": "tmax"}) for temp in temps:
print(temp.text)
Quando eseguiamo questo codice, vedremo in output tutte le temperature della settimana per Roma.
Come potete vedere, utilizziamo di nuovo la funzione findAll() ma in questo caso passiamo una condizione in più, ovvero specifichiamo che il tag trovato deve anche avere una certa classe. Se invece vogliamo ottenere tutti i tag HTML con un certo id con Python possiamo usare il seguente codice:
Web scraping: Come ottenere tutti i tag con id specifico con Python
temps = contenuto.findAll("span", {"id": "tmax"})
Come potete vedere l’unica cosa che cambia è il nome ‘class’ che diventa ‘id’.
Ci siamo! Abbiamo visto come fare il web scraping con python per: Ottenere il contenuto di una pagina web, ottenere il titolo della pagina, ottenere una lista di tag come link e paragrafi ed infine come ottenere una lista di tag con id o classe specifica.