CodeGym /Kurse /Python SELF DE /Datenerfassung aus Tabellen und Listen

Datenerfassung aus Tabellen und Listen

Python SELF DE
Level 32 , Lektion 2
Verfügbar

1. Extrahieren von Tabellendaten

Was haben Tabellen und Zwiebeln gemeinsam? Genau, Schichten!

Tabellen in HTML sind wie ein Schichtkuchen aufgebaut, der aus den Elementen <table>, <tr> (Zeilen), <th> (Headerzellen) und <td> (normale Zellen) besteht. Jedes dieser Elemente hat seine eigene Rolle bei der Darstellung von Daten, und um Informationen herauszuziehen, müssen wir jede Schicht nacheinander durchgehen.

Übung macht den Meister!

Fangen wir mit einer einfachen HTML-Tabelle an:

HTML
<table>
 <tr>
 <th>Name</th>
 <th>Alter</th>
 <th>Stadt</th>
 </tr>
 <tr>
 <td>Alice</td>
 <td>29</td>
 <td>Moskau</td>
 </tr>
 <tr>
 <td>Bob</td>
 <td>34</td>
 <td>Sankt-Petersburg</td>
 </tr>
</table>

Schritt 1: Tabelle auf der Seite finden

Tabellen auf Webseiten werden durch den HTML-Tag <table> definiert, während die Daten innerhalb der Tabelle in den Tags <tr> (Tabellenzeilen) und <td> (Datenelemente) liegen. Mit BeautifulSoup können wir mit der Methode find die erste Tabelle auf der Seite finden oder mit find_all alle Tabellen, falls es mehrere gibt.

Python
# Suche nach der ersten Tabelle auf der Seite
table = soup.find("table")

Möchte man eine spezifische Tabelle extrahieren, kann man die Suche mit Attributen wie id oder class verfeinern.

Python

# Suche nach Tabelle anhand der Klasse
table = soup.find("table", {"class": "table-class"})

Schritt 2: Daten aus der Tabelle extrahieren

Nach dem Laden der Tabelle können wir mit der Datenextraktion beginnen. Da die Daten zeilenweise organisiert sind, iteriert man durch die Zeilen der Tabelle und extrahiert die Daten aus jeder Zelle.

Extrahieren von Headern

Üblicherweise befinden sich die Header in der ersten Zeile und sind in <th>-Tags eingeschlossen. Mit find_all kann man alle Header in einer Liste sammeln.

Python
# Header aus der ersten Tabellenzeile extrahieren
headers = []
header_row = table.find("tr")
for th in header_row.find_all("th"):
headers.append(th.text.strip())

print("Tabellen-Header:", headers)

Extrahieren von Datenzeilen

Um alle Datenzeilen zu extrahieren (die üblicherweise in <tr>-Tags enthalten sind, wobei jede Zelle in <td> eingeschlossen ist), verwendet man eine geschachtelte Schleife: Zunächst sucht man alle Zeilen <tr>, dann die Datenzellen <td> in jeder Zeile.

Python

# Alle Datenzeilen extrahieren
data = []
rows = table.find_all("tr")[1:]  # Überspringe die erste Zeile mit Headern

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

print("Tabellen-Daten:", data)

Dieser Code iteriert durch die Tabellenzeilen und extrahiert den Text aus jeder Zelle. Cool, oder? Natürlich wissen wir alle, dass es ohne die Magie von Schleifen keine Wunder gibt!

2. Arbeit mit Listen

Listen — die großen Geschwister von Tabellen

Im Leben gibt es nur zwei unendliche Objekte: Tabellen und Listen. Listen werden durch die Elemente <ul> (ungeordnete Listen) und <ol> (geordnete Listen) dargestellt, ihre Elemente sind <li>. Im Gegensatz zu Tabellen sind Listen einfach und minimalistisch. Das macht sie ideal für eine schnelle und effektive Datenverarbeitung!

Extrahieren von Daten aus Listen

Hier ist ein Beispiel für eine HTML-Liste:

HTML

<ul>
 <li>Apfel</li>
 <li>Banane</li>
 <li>Trauben</li>
</ul>

Jetzt benutzen wir unser geliebtes BeautifulSoup, um diese Daten zu extrahieren:

Python

html = """
<ul>
  <li>Apfel</li>
  <li>Banane</li>
  <li>Trauben</li>
</ul>
"""

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

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

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

Und das war's! Eine einfache, aber effektive Methode, die du auf komplexere Strukturen anwenden kannst.

3. Beispiel: Tabellen- und Listendaten extrahieren

Um die Theorie zu üben, versuchen wir, Daten aus einem ähnlichen, aber komplexeren Beispiel praktisch zu extrahieren:

HTML

<table id="kurse">
 <tr>
 <th>Kurs</th>
 <th>Lehrer</th>
 </tr>
 <tr>
 <td>Python für alle</td>
 <td>Guido van Rossum</td>
 </tr>
 <tr>
 <td>Automatisierung mit Python</td>
 <td>Eric Matthes</td>
 </tr>
</table>

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

Um Daten aus Tabelle und Liste zu extrahieren, kann man folgende Abfragen verwenden:

Python

html = """
<table id="kurse">
  <tr>
    <th>Kurs</th>
    <th>Lehrer</th>
  </tr>
  <tr>
    <td>Python für alle</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatisierung mit Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

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

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

# Daten aus Tabelle extrahieren
course_table = soup.find('table', id='kurse')
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("---")

# Daten aus Liste extrahieren
tech_list = soup.find('ul', class_='technologien')
tech_items = tech_list.find_all('li')

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

Dieses Skript deckt beide Arten von Daten ab. Beachte, wie wir IDs und Klassen verwenden, um Elemente präzise zu finden. In der Praxis kannst du auf noch komplexere HTML-Strukturen stoßen, aber der Ansatz bleibt derselbe: von der obersten Ebene beginnen, Elemente analysieren und schließlich die wertvollen Daten extrahieren!

4. Zusammenfassung und häufige Fehler

Mit Tabellen und Listen auf Webseiten zu arbeiten, ist wie das Navigieren in einem Labyrinth. Manchmal begegnet man unvollständigen Daten, wie leeren Zellen oder fehlenden Elementen. In solchen Fällen ist es wichtig, sicherzustellen, dass die Daten korrekt und vollständig sind. Häufige Fehler umfassen das Zugreifen auf nicht existierende Elemente oder die falsche Verwendung von Selektoren. Es ist wichtig, zu bedenken, dass HTML nicht immer sauber und strukturiert ist, wie man es sich wünscht. Daher sollte man immer Ausnahmen behandeln und die Datenvalidität überprüfen.

Wo kann das nützlich sein?

Das Wissen aus dieser Vorlesung hilft dir, Daten automatisch aus verschiedenen Online-Quellen zu extrahieren und zu verarbeiten. Zum Beispiel kannst du Daten aus Börsentabellen sammeln, Preisüberwachungen in Onlineshops einrichten und sogar regelmäßige Datenanalysen aus Blogs und Nachrichten-Webseiten durchführen. Die Fähigkeit, Daten aus Tabellen und Listen zu extrahieren, öffnet dir eine Welt voller Möglichkeiten zur Automatisierung und Datenanalyse.

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