
Il web scraping è una tecnica utilizzata per estrarre dati da siti web. Grazie alla potenza di Python e di librerie come BeautifulSoup, possiamo scrivere applicazioni in grado di raccogliere informazioni utili da pagine web in modo semplice ed efficace. In questo articolo, esploreremo come creare un'app di web scraping utilizzando Python e BeautifulSoup per estrarre dati strutturati da un sito web. Tratteremo i passaggi necessari per configurare l'ambiente di lavoro, scrivere il codice di scraping e gestire i dati estratti in modo pratico.
BeautifulSoup è una libreria Python che semplifica il parsing di documenti HTML e XML. Essa consente di navigare facilmente nel contenuto di una pagina web e di estrarre i dati in modo strutturato. È particolarmente utile per il web scraping, in quanto permette di cercare e manipolare il codice HTML con semplicità, senza doversi preoccupare della complessità sottostante.
Per utilizzare BeautifulSoup, dobbiamo anche installare la libreria requests, che ci consente di fare richieste HTTP per scaricare il contenuto delle pagine web. Le due librerie principali che ci servono sono quindi BeautifulSoup e requests.
Per installare queste librerie, possiamo usare il comando pip:
pip install requests beautifulsoup4
Preparare l'ambiente di lavoro
Prima di iniziare a scrivere il codice, dobbiamo assicurarci di avere un ambiente Python configurato correttamente. Una volta installate le librerie richieste, possiamo iniziare a scrivere il nostro programma.
Immaginiamo di voler raccogliere informazioni sui titoli degli articoli da una pagina web di un blog. Utilizzeremo BeautifulSoup per analizzare il contenuto HTML e estrarre i dati desiderati.
Eseguire una richiesta HTTP e scaricare una pagina
Il primo passo in un'app di web scraping è scaricare il contenuto di una pagina web. Per fare ciò, utilizziamo la libreria requests, che invia una richiesta HTTP al server del sito web e ci restituisce il contenuto della pagina. Ecco come possiamo fare:
import requests
# URL del sito web da cui fare scraping
url = 'https://example.com'
# Invia una richiesta GET al sito web
response = requests.get(url)
# Verifica che la richiesta sia andata a buon fine
if response.status_code == 200:
print("Pagina scaricata con successo!")
else:
print(f"Errore nel caricamento della pagina. Status code: {response.status_code}")
Nel codice sopra, inviamo una richiesta HTTP di tipo GET al sito https://example.com
. La risposta viene memorizzata nella variabile response
. Se la richiesta ha avuto successo (status code 200), stampiamo un messaggio di conferma. Se si verifica un errore, restituiamo il codice di stato dell'errore.
Analizzare il contenuto HTML con BeautifulSoup
Una volta ottenuto il contenuto HTML della pagina, possiamo utilizzare BeautifulSoup per analizzarlo e navigare tra gli elementi HTML. Supponiamo che il nostro obiettivo sia estrarre tutti i titoli degli articoli presenti sulla pagina. Per farlo, dobbiamo analizzare il codice HTML e cercare gli elementi che contengono i titoli.
Per iniziare, creiamo un oggetto BeautifulSoup e passiamo il contenuto della pagina al suo costruttore:
from bs4 import BeautifulSoup
# Creiamo l'oggetto BeautifulSoup per analizzare il contenuto HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Visualizziamo il codice HTML analizzato
print(soup.prettify()) # Stampa il codice HTML in un formato leggibile
Il metodo prettify()
è utile per visualizzare l'HTML in un formato leggibile, con una corretta indentazione. In questo modo, possiamo esplorare la struttura della pagina e identificare gli elementi che ci interessano.
Estrazione dei titoli degli articoli
Immaginiamo che i titoli degli articoli siano contenuti in tag <h2>
con una classe CSS chiamata article-title
. Per estrarre questi titoli, possiamo utilizzare il metodo find_all()
di BeautifulSoup, che ci permette di cercare tutti gli elementi che corrispondono a un determinato criterio.
# Troviamo tutti i titoli degli articoli
titoli_articoli = soup.find_all('h2', class_='article-title')
# Stampiamo ogni titolo trovato
for titolo in titoli_articoli:
print(titolo.text)
In questo codice:
- La funzione
find_all()
cerca tutti i tag<h2>
con la classearticle-title
. - Ogni tag trovato viene passato in un ciclo
for
, e il testo del titolo (estratto contitolo.text
) viene stampato.
Questa operazione ci permette di raccogliere facilmente tutti i titoli degli articoli presenti sulla pagina.
Gestire i dati estratti
Una volta estratti i dati, possiamo salvarli in vari formati, come ad esempio un file CSV o un database. Supponiamo di voler salvare i titoli degli articoli in un file CSV. Per farlo, possiamo utilizzare la libreria csv di Python.
Ecco un esempio di come scrivere i dati in un file CSV:
import csv
# Creiamo un file CSV e scriviamo i titoli degli articoli
with open('titoli_articoli.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Titolo']) # Intestazione del file CSV
for titolo in titoli_articoli:
writer.writerow([titolo.text]) # Scrive ogni titolo nel file CSV
print("I titoli sono stati salvati nel file titoli_articoli.csv")
In questo esempio:
- Apriamo un file CSV in modalità scrittura (
mode='w'
). - Scriviamo la riga di intestazione con
writer.writerow()
. - Per ogni titolo estratto, scriviamo una nuova riga nel file CSV con
writer.writerow([titolo.text])
.
Considerazioni sull'etica del web scraping
Quando si esegue il web scraping, è importante tenere a mente alcune considerazioni etiche e legali. Non tutti i siti web permettono di essere "scrapati", quindi è fondamentale leggere e rispettare i Termini di Servizio di ogni sito web. Inoltre, alcuni siti forniscono un file robots.txt che indica quali pagine possono essere accessibili per il web scraping. Ignorare queste linee guida può comportare il blocco dell'IP o problemi legali.
Conclusione
Abbiamo visto come creare un'app di web scraping utilizzando Python e BeautifulSoup per estrarre dati da un sito web. Questa tecnica è molto potente e può essere applicata a una vasta gamma di casi d'uso, dalla raccolta di dati per l'analisi alla creazione di aggregatori di contenuti. Tuttavia, è fondamentale utilizzare il web scraping in modo responsabile e rispettare le politiche dei siti web da cui si prelevano i dati.
Con i passaggi descritti, puoi iniziare a scrivere il tuo codice di scraping e raccogliere informazioni da una varietà di fonti online. Utilizzando librerie come BeautifulSoup e requests, il web scraping con Python diventa un'operazione rapida, semplice e potente.