Salta al contenuto principale

Creare un'app di web scraping con Python e BeautifulSoup

Profile picture for user luca77king

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:

  1. La funzione find_all() cerca tutti i tag <h2> con la classe article-title.
  2. Ogni tag trovato viene passato in un ciclo for, e il testo del titolo (estratto con titolo.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:

  1. Apriamo un file CSV in modalità scrittura (mode='w').
  2. Scriviamo la riga di intestazione con writer.writerow().
  3. 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.

Faqs

Che cos'è il web scraping?
Il web scraping è una tecnica utilizzata per estrarre dati da siti web.
Cosa semplifica la libreria BeautifulSoup?
BeautifulSoup semplifica il parsing di documenti HTML e XML, permettendo di navigare facilmente nel contenuto di una pagina web e di estrarre i dati in modo strutturato.
A cosa serve la libreria requests?
La libreria requests consente di fare richieste HTTP per scaricare il contenuto delle pagine web.
Come si installano BeautifulSoup e requests?
Si possono installare utilizzando il comando pip: pip install requests beautifulsoup4
Qual è il primo passo in un'app di web scraping?
Il primo passo in un'app di web scraping è scaricare il contenuto di una pagina web utilizzando la libreria requests.
Cosa fa il metodo prettify() di BeautifulSoup?
Il metodo prettify() di BeautifulSoup permette di visualizzare l'HTML in un formato leggibile, con una corretta indentazione.
Come si estraggono i titoli degli articoli con BeautifulSoup?
Si estraggono utilizzando il metodo find_all() di BeautifulSoup, che permette di cercare tutti gli elementi che corrispondono a un determinato criterio.
Come si salvano i dati estratti in un file CSV?
Si salvano utilizzando la libreria csv di Python, creando un file CSV in modalità scrittura e scrivendo le righe di dati con il metodo writerow().