Se pensi che le pagine web siano solo immagini carine e testo, ho una notizia per te:
sono come cipolle — a strati, e possono farti piangere (di gioia, ovviamente!) quando scopri
quanti dati puoi estrarre da esse. Oggi scaviamo nei documenti HTML con la libreria
BeautifulSoup
. Prendi la tua pala virtuale — è ora di scavare!
1. Analisi dei documenti HTML
Pagine semplici
Analizziamo qualche documento HTML semplice per capire da cosa sono composti e quali elementi possono essere interessanti per l'estrazione dei dati.
Esempio di una pagina di notizie:
<html>
<head>
<title>Notizie</title>
</head>
<body>
<h1>La notizia principale del giorno</h1>
<p>Oggi è successo qualcosa di importante!</p>
</body>
</html>
In questo esempio, h1
contiene il titolo dell'articolo,
mentre p
contiene il testo principale.
L'influenza della struttura HTML sul web scraping
Prima di usare BeautifulSoup
, è importante capire come è strutturato il documento HTML che vuoi analizzare.
Questo ci aiuta a individuare quali parti della pagina contengono i dati richiesti. Ad esempio, se stai cercando il titolo
della pagina, guarda il <h1>
, mentre per estrarre un elenco usa <ul>
e
<li>
.
Preparazione per il web scraping
Prima di iniziare l'estrazione dei dati, è importante identificare i tag e gli attributi chiave.
Ad esempio, se gli sviluppatori web hanno già etichettato i dati nella loro pagina usando un attributo
come class="headline"
per i titoli, questo ti sarà molto utile. Usa gli strumenti di sviluppo nel browser
per esplorare la struttura HTML. Fai clic destro su un elemento e seleziona "Ispeziona"
(in Google Chrome).
2. Installazione e configurazione delle librerie
Installazione di BeautifulSoup
e requests
Per lavorare con gli HTML utilizzeremo la libreria BeautifulSoup
. Inoltre, per caricare le pagine HTML ci tornerà utile
requests
. L'installazione è semplice e richiede solo un paio di comandi nella tua console:
pip install beautifulsoup4 requests
Collaborazione tra requests e BeautifulSoup
Requests ci permette di richiedere l'HTML di una pagina web, mentre
BeautifulSoup
ci aiuta ad analizzarla. Vediamo come funziona in pratica:
import requests
from bs4 import BeautifulSoup
# Carichiamo la pagina
url = 'https://example.com'
response = requests.get(url)
# Analizziamo la pagina con BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# Estraiamo il titolo della pagina
title = soup.title.text
print('Titolo:', title)
3. Navigazione ed estrazione di dati tramite tag
Metodi di navigazione
Ora che abbiamo il documento HTML, possiamo usare BeautifulSoup
per navigarci.
Il fantastico metodo .select()
permette di estrarre dati usando i selettori CSS.
Estrazione di dati tramite tag
BeautifulSoup
offre metodi che permettono di trovare elementi tramite i loro tag,
come find
e find_all
. Sono molto utili per trovare i pezzi di dati desiderati:
# Troviamo il primo paragrafo
paragraph = soup.find('p').text
print('Primo paragrafo:', paragraph)
# Troviamo tutti gli elementi della lista
list_items = soup.find_all('li')
for item in list_items:
print('Elemento della lista:', item.text)
Uso di attributi per filtrare
A volte dovrai estrarre elementi che soddisfano certe condizioni, per esempio, che abbiano una specifica class
.
BeautifulSoup
rende questa operazione molto semplice:
# Estrazione di un elemento con una classe specifica
headline = soup.find('h1', class_='main-headline').text
print('Titolo:', headline)
4. Uso dei selettori CSS
Cosa sono i selettori CSS?
I selettori CSS sono strumenti potenti dal punto di vista di un programmatore Python, che permettono di estrarre dati secondo criteri specifici. Possono essere utilizzati per trovare elementi con stili comuni, rendendo il web scraping più flessibile e preciso.
Uso dei selettori in BeautifulSoup
BeautifulSoup
permette l'uso dei selettori CSS tramite il metodo select
. Ad esempio:
# Selezione di tutti i link
links = soup.select('a')
for link in links:
print('Link:', link['href'])
Puoi anche combinare i selettori per una selezione più precisa. Ad esempio,
soup.select('div.article h2')
selezionerà tutti gli h2
dentro i
div
con la classe article
.
Esempi di ricerca con i selettori CSS
Applichiamo le nostre conoscenze alla pratica. Seleziona tutti i paragrafi con classe
highlight
e stampa il loro testo:
# Estrazione di tutti i paragrafi con classe 'highlight'
highlighted_paragraphs = soup.select('p.highlight')
for para in highlighted_paragraphs:
print('Paragrafo evidenziato:', para.text)
Per ora è tutto, non dimenticare di esercitarti sulle tue competenze di scraping prima del prossimo incontro. Buona fortuna nel fantastico mondo del parsing!
GO TO FULL VERSION