Realizato da

Pubblicato il

scraping

python


guida italiano web scraping con python e beautifulSoup

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.

Installare BeautifulSoup è molto semplice e può essere fatto attraverso pip. Ricordate che potete creare un virtual environment se non volete installare questa libreria globalmente sul vostro PC. Se non sapete come creare un virtual environment con python potete seguire la nostra guida.

Il comando da eseguire nel terminale per installare BeautifulSoup è il seguente:
pip install beautifulsoup4


Mentre per installare requests:

pip install requests


Come ottenere il contenuto di una pagine HTML attraverso codice Python

Per questo esempio andremo ad ottenere i dati delle previsioni metereologiche per Roma dal sito ilmeteo.it Ovviamente questo non è il metodo migliore per ottenere dati delle previsioni meteo, ma questo è solo un esempio.

Vediamo un semplice codice Python per ottenere il contenuto di una pagine HTML sotto forma di una struttura dati 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() 
Vediamo un esempio dove otteniamo tutti i link ( tag <a> ) nella pagina.
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. 

Se hai una domanda puoi chiedere qualsiasi cosa nei commenti in basso

Grazie per aver letto questa guida su Devnews.it

Spero ti sia stata utile in qualche modo. Ti prego di supportare questa pagina mettendo mi piace alle nostre pagine social cliccando un basso, dove pubblichiamo regolermente notizie, tutorial e fatti curiosi sull'informatica. Grazie e ci vediamo alla prossima :)