CodeGym /Corsi /Python SELF IT /Raccolta dati da tabelle e liste

Raccolta dati da tabelle e liste

Python SELF IT
Livello 32 , Lezione 2
Disponibile

1. Estrazione di dati tabulari

Cosa hanno in comune le tabelle e le cipolle? Sì, sì, gli strati!

Le tabelle in HTML sono una sorta di equivalente di un millefoglie, che è composto da elementi <table>, <tr> (righe), <th> (celle di intestazione) e <td> (celle comuni). Ognuno di questi elementi ha un ruolo nella rappresentazione dei dati e, per estrarre le informazioni, dobbiamo accedere a ogni strato uno alla volta.

Pratica, pratica e ancora pratica!

Iniziamo con la seguente semplice tabella HTML:

HTML
<table>
  <tr>
    <th>Nome</th>
    <th>Età</th>
    <th>Città</th>
  </tr>
  <tr>
    <td>Alice</td>
    <td>29</td>
    <td>Mosca</td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>34</td>
    <td>San Pietroburgo</td>
  </tr>
</table>

Passo 1: Trovare una tabella nella pagina

Le tabelle nelle pagine web sono definite dai tag HTML <table>, e i dati all'interno delle tabelle si trovano dentro i tag <tr> (righe della tabella) e <td> (celle di dati). In BeautifulSoup il metodo find aiuta a trovare la prima tabella sulla pagina, mentre find_all consente di ottenere tutte le tabelle, se ce ne sono diverse.

Python
# Trovare la prima tabella sulla pagina
table = soup.find("table")

Se è necessario estrarre una specifica tabella, possiamo affinare la ricerca, specificando gli attributi della tabella, ad esempio, id o class.

Python

# Trovare una tabella per classe
table = soup.find("table", {"class": "table-class"})

Passo 2: Estrazione dei dati dalla tabella

Dopo il caricamento, possiamo procedere con l'estrazione dei dati. I dati nella tabella sono disposti per righe, quindi il passo logico sarà scorrere le righe della tabella ed estrarre i dati da ogni cella.

Estrazione delle intestazioni

Le intestazioni della tabella di solito si trovano nella prima riga e sono racchiuse nei tag <th>. Usare find_all permette di raccogliere tutte le intestazioni in una lista.

Python
# Estrarre le intestazioni dalla prima riga della tabella
headers = []
header_row = table.find("tr")
for th in header_row.find_all("th"):
headers.append(th.text.strip())

print("Intestazioni della tabella:", headers)

Estrazione delle righe di dati

Per estrarre tutte le righe dei dati (di solito racchiuse nei tag <tr>, e ogni cella — in <td>) utilizziamo un ciclo nidificato: prima troviamo tutte le righe <tr>, quindi scansioniamo le celle <td> in ogni riga.

Python

# Estrarre tutte le righe di dati
data = []
rows = table.find_all("tr")[1:]  # Saltare la prima riga con le intestazioni

for row in rows:
row_data = []
for cell in row.find_all("td"):
row_data.append(cell.text.strip())
data.append(row_data)

print("Dati della tabella:", data)

Questo codice scorre ordinatamente le righe della tabella e estrae il testo da ogni cella. Non è fantastico? Ovviamente tutti sappiamo che non ci sono magie senza i cicli!

2. Lavorare con le liste

Le liste — fratelli maggiori delle tabelle

Nella vita, ci sono solo due oggetti infiniti: tabelle e liste. Le liste sono rappresentate dagli elementi <ul> (non numerate) e <ol> (numerate), e i loro elementi sono <li>. A differenza delle tabelle, le liste sono semplici e minimaliste. Questo le rende ideali per un'elaborazione rapida ed efficace dei dati!

Estrazione di dati dalle liste

Guardiamo un esempio di lista HTML:

HTML

<ul>
  <li>Mela</li>
  <li>Banana</li>
  <li>Uva</li>
</ul>

Ora usiamo il nostro caro BeautifulSoup, per estrarre questi dati:

Python

html = """
<ul>
  <li>Mela</li>
  <li>Banana</li>
  <li>Uva</li>
</ul>
"""

soup = BeautifulSoup(html, 'html.parser')

ul = soup.find('ul')
items = ul.find_all('li')

for item in items:
    print(item.get_text())

Ecco fatto! Un approccio semplice, ma efficace, che puoi applicare a strutture più complesse.

3. Esempio di estrazione e elaborazione di dati tabulari

Per consolidare le conoscenze, proviamo a estrarre dati da un esempio pratico simile, ma con una struttura più complessa:

HTML

<table id="courses">
  <tr>
    <th>Corso</th>
    <th>Istruttore</th>
  </tr>
  <tr>
    <td>Python per tutti</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automazione con Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="technologies">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>

Per estrarre i dati dalla tabella e dalla lista, possiamo impostare le query in questo modo:

Python

html = """
<table id="courses">
  <tr>
    <th>Corso</th>
    <th>Istruttore</th>
  </tr>
  <tr>
    <td>Python per tutti</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automazione con Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="technologies">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>
"""

soup = BeautifulSoup(html, 'html.parser')

# Estrazione di dati dalla tabella
course_table = soup.find('table', id='courses')
course_rows = course_table.find_all('tr')

for row in course_rows:
    cells = row.find_all(['th', 'td'])
    for cell in cells:
        print(cell.get_text())

print("---")

# Estrazione di dati dalla lista
tech_list = soup.find('ul', class_='technologies')
tech_items = tech_list.find_all('li')

for item in tech_items:
    print(item.get_text())

Questo script copre entrambi i tipi di dati. Nota come utilizziamo id e classi per una ricerca precisa dei tag. Nella pratica potresti trovarti di fronte a strutture HTML più complesse, ma il procedimento rimane lo stesso: iniziamo dai livelli più alti, analizziamo gli elementi e, infine, estraiamo i dati preziosi!

4. Conclusione parziale ed errori comuni

Lavorare con tabelle e liste nelle pagine web è come navigare in un labirinto. A volte possiamo incontrare dati imperfetti, come celle vuote o elementi mancanti. In questi casi, è importante verificare che i dati siano corretti e completi. Gli errori comuni possono includere tentativi di accedere a elementi inesistenti o uso errato dei selettori. È importante ricordare che l'HTML potrebbe non essere pulito e strutturato come ci piacerebbe, quindi conviene sempre considerare il trattamento delle eccezioni e la verifica della validità dei dati.

Dove può essere utile?

Le conoscenze acquisite in questa lezione ti aiuteranno a estrarre ed elaborare automaticamente i dati da molte fonti online. Puoi, ad esempio, automatizzare la raccolta dai dati di scambio, configurare un monitoraggio dei prezzi nei negozi online e persino eseguire un'analisi regolare dei dati da blog e siti di notizie. La padronanza delle tecniche di estrazione dei dati da tabelle e liste apre un mondo di possibilità per l'automazione e l'analisi dei dati.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION