Zurück zum Blog
Anleitungen
Andrei OgiolanLast updated on Mar 31, 20268 min read

Erfahren Sie, wie Sie HTML-Tabellen mit Python auslesen

Erfahren Sie, wie Sie HTML-Tabellen mit Python auslesen

Einleitung

Web-Scraping ist ein leistungsstarkes Werkzeug, mit dem Sie Daten aus Websites extrahieren und für verschiedene Zwecke nutzen können, beispielsweise für Data Mining, Datenanalyse und maschinelles Lernen. Eine häufige Aufgabe beim Web Scraping ist das Extrahieren von Daten aus HTML-Tabellen, die auf vielen Websites zu finden sind und dazu dienen, Daten in einem strukturierten, tabellarischen Format darzustellen. In diesem Artikel lernen wir, wie man mit Python Daten aus HTML-Tabellen extrahiert und in einem Format speichert, das sich leicht verarbeiten und analysieren lässt.

Am Ende dieses Artikels verfügen Sie über die Fähigkeiten und das Wissen, um Ihren eigenen Web-Scraper zu erstellen, der Daten aus HTML-Tabellen extrahieren und für verschiedene Zwecke nutzen kann. Ganz gleich, ob Sie als Datenwissenschaftler Daten für Ihr nächstes Projekt sammeln möchten, als Unternehmer Daten für Marktforschung benötigen oder als Entwickler Ihr eigenes Web-Scraping-Tool erstellen wollen – dieser Artikel bietet Ihnen eine wertvolle Ressource für den Einstieg in das Scraping von HTML-Tabellen mit Python.

Was sind HTML-Tabellen?

HTML-Tabellen sind eine Art von Element in HTML (Hypertext Markup Language), das verwendet wird, um tabellarische Daten auf einer Webseite darzustellen. Eine HTML-Tabelle besteht aus Zeilen und Spalten von Zellen, die Text, Bilder oder andere HTML-Elemente enthalten können. HTML-Tabellen werden mithilfe des table-Elements erstellt und sind wie folgt strukturiert: „<tr>“ (Tabellenzeile), „<td>“ (Tabellenzelle), „<th>“ (Tabellenkopf), „<caption>“, „<col>“, „<colgroup>“, „<tbody>“ (Tabellenkörper), „<thead>“ (Tabellenkopfzeile) und „<tfoot>“ (Tabellenfußzeile). Sehen wir uns nun jedes einzelne genauer an:

  • table-Element: Definiert den Anfang und das Ende einer HTML-Tabelle.
  • tr-Element (Tabellenzeile): Definiert eine Zeile in einer HTML-Tabelle.
  • td-Element (Tabellenzelle): Definiert eine Zelle in einer HTML-Tabelle.
  • th-Element (Tabellenkopf): Definiert eine Kopfzelle in einer HTML-Tabelle. Kopfzellen werden standardmäßig fett und zentriert angezeigt und dienen zur Beschriftung der Zeilen oder Spalten der Tabelle.
  • caption-Element: Definiert eine Beschriftung oder einen Titel für eine HTML-Tabelle. Die Beschriftung wird in der Regel über oder unter der Tabelle angezeigt.
  • col- und colgroup-Elemente: Definieren die Eigenschaften der Spalten in einer HTML-Tabelle, wie z. B. die Breite oder die Ausrichtung.
  • tbody-, thead- und tfoot-Elemente: Definieren den Hauptteil, den Kopf- und den Fußbereich einer HTML-Tabelle. Diese Elemente können verwendet werden, um Zeilen zu gruppieren und Stile oder Attribute auf einen bestimmten Abschnitt der Tabelle anzuwenden.

Um dieses Konzept besser zu verstehen, schauen wir uns an, wie eine HTML-Tabelle aussieht:

Auf den ersten Blick sieht es wie eine normale Tabelle aus, und wir können die Struktur mit den oben beschriebenen Elementen nicht erkennen. Das bedeutet nicht, dass sie nicht vorhanden sind, sondern dass der Browser dies bereits für uns parst. Um die HTML-Struktur sehen zu können, müssen Sie einen Schritt tiefer gehen und Entwicklertools verwenden. Das geht so: Klicken Sie mit der rechten Maustaste auf die Seite, wählen Sie „Inspect“, klicken Sie auf das Werkzeug „Element auswählen“ und dann auf das Element (in diesem Fall die Tabelle), dessen HTML-Struktur Sie anzeigen möchten. Nach diesen Schritten sollten Sie etwa Folgendes sehen:

HTML-Tabellen werden häufig verwendet, um Daten in einem strukturierten, tabellarischen Format darzustellen, beispielsweise zur tabellarischen Aufbereitung von Ergebnissen oder zur Anzeige des Inhalts einer Datenbank. Sie sind auf einer Vielzahl von Websites zu finden und ein wichtiges Element, das beim Scraping von Daten aus dem Web zu berücksichtigen ist.

Einrichtung

Bevor wir mit dem Scraping von Daten aus HTML-Tabellen beginnen können, müssen wir unsere Umgebung einrichten und sicherstellen, dass alle erforderlichen Tools und Bibliotheken installiert sind. Der erste Schritt besteht darin, sicherzustellen, dass Python auf Ihrem Computer installiert ist. Falls Python noch nicht installiert ist, können Sie es von der offiziellen Python-Website (https://www.python.org/) herunterladen und den Anweisungen zur Installation folgen.

Als Nächstes müssen wir einige Bibliotheken installieren, die uns beim Scrapen von Daten aus HTML-Tabellen helfen. Zu den beliebtesten Bibliotheken für Web-Scraping in Python gehören Beautiful Soup, Selenium und Scrapy. In diesem Artikel liegt der Schwerpunkt auf der Verwendung von Beautiful Soup, da diese im Vergleich zu den anderen sehr einfach zu handhaben ist. Beautiful Soup ist eine Bibliothek, die das Parsen von HTML- und XML-Dokumenten vereinfacht und besonders nützlich für das Extrahieren von Daten aus Webseiten ist. Das reicht zwar aus, um die gesuchten HTML-Daten zu scrapen, doch im HTML-Format sind diese für das menschliche Auge nicht besonders gut lesbar, sodass Sie die Daten vielleicht irgendwie aufbereiten möchten. Hier kommt die Pandas-Bibliothek ins Spiel.

Pandas ist eine Datenanalyse-Bibliothek, die Werkzeuge für die Arbeit mit strukturierten Daten wie HTML-Tabellen bereitstellt. Sie können diese Bibliotheken mit dem pip-Paketmanager installieren, der in Python enthalten ist:

$ pip install beautifulsoup4 pandas

Sobald Sie Python und die erforderlichen Bibliotheken installiert haben, können Sie damit beginnen, Daten aus HTML-Tabellen zu extrahieren. Im nächsten Abschnitt gehen wir die Schritte zur Erstellung eines Web-Scrapers durch, der Daten aus einer HTML-Tabelle extrahieren und in einem strukturierten Format speichern kann.

Fangen wir mit dem Scraping an

Nachdem wir nun unsere Umgebung eingerichtet haben und über ein grundlegendes Verständnis von HTML-Tabellen verfügen, können wir mit der Erstellung eines Web-Scrapers beginnen, um Daten aus einer HTML-Tabelle zu extrahieren. In diesem Abschnitt gehen wir die Schritte zur Erstellung eines einfachen Scrapers durch, der Daten aus einer Tabelle extrahieren und in einem strukturierten Format speichern kann.

Der erste Schritt besteht darin, mithilfe der requests-Bibliothek eine HTTP-Anfrage an die Webseite zu senden, die die HTML-Tabelle enthält, die wir scrapen möchten.

Sie können sie wie jedes andere Python-Paket mit pip installieren:

$ pip install requests

Mit dieser Bibliothek können wir den HTML-Inhalt einer Webseite als Zeichenkette abrufen:

import requests

url = 'https://www.w3schools.com/html/html_tables.asp'

html = requests.get(url).text

Als Nächstes verwenden wir die BeautifulSoup-Bibliothek, um den HTML-Inhalt zu analysieren und die Daten aus der Tabelle zu extrahieren. BeautifulSoup bietet eine Vielzahl von Methoden und Attributen, die das Navigieren und Extrahieren von Daten aus einem HTML-Dokument vereinfachen. Hier ist ein Beispiel dafür, wie man damit das Tabellenelement findet und die Daten aus den Zellen extrahiert:

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

# Find the table element

table = soup.find('table')

# Extract the data from the cells

data = []

for row in table.find_all('tr'):

   cols = row.find_all('td')

   # Extracting the table headers

   if len(cols) == 0:

       cols = row.find_all('th')

   cols = [ele.text.strip() for ele in cols]

   data.append([ele for ele in cols if ele])  # Get rid of empty values

print(data)


Das 2D-Datenarray ist nun mit den Werten der Tabellenzeilen und -spalten gefüllt. Um es für uns besser lesbar zu machen, können wir den Inhalt nun ganz einfach an ein Pandas-Dataframe übergeben:

import pandas as pd

# Getting the headers from the data array

# It is important to remove them from the data array afterwards in order to be parsed correctly by Pandas

headers = data.pop(0)

df = pd.DataFrame(data, columns=headers)

print(df)

Sobald Sie die Daten aus der Tabelle extrahiert haben, können Sie sie für verschiedene Zwecke nutzen, wie z. B. Datenanalyse, maschinelles Lernen oder die Speicherung in einer Datenbank. Sie können den Code auch so anpassen, dass mehrere Tabellen von derselben Webseite oder von mehreren Webseiten aus ausgelesen werden.

Bitte beachten Sie, dass es nicht bei allen Websites im Internet so einfach ist, Daten zu scrapen. Viele von ihnen haben hochgradige Schutzmaßnahmen implementiert, die das Scraping verhindern sollen, wie z. B. CAPTCHA und das Blockieren von IP-Adressen. Glücklicherweise gibt es jedoch Dienste von Drittanbietern wie WebScrapingAPI, die IP-Rotation und CAPTCHA-Umgehung anbieten, sodass Sie diese Ziele scrapen können.

Ich hoffe, dieser Abschnitt hat Ihnen einen hilfreichen Überblick über den Prozess des Auslesens von Daten aus einer HTML-Tabelle mit Python gegeben. Im nächsten Abschnitt werden wir einige Möglichkeiten zur Verbesserung dieses Prozesses sowie bewährte Verfahren für das Web-Scraping besprechen.

Weiterführende Themen

Der im vorherigen Abschnitt erstellte Scraper ist zwar funktionsfähig und kann Daten aus einer HTML-Tabelle extrahieren, doch es gibt eine Reihe von Möglichkeiten, ihn zu verbessern und zu optimieren, um ihn effizienter und effektiver zu machen. Hier sind einige Vorschläge:

  • Umgang mit Paginierung: Wenn sich die HTML-Tabelle, die Sie scrapen, über mehrere Seiten erstreckt, müssen Sie den Scraper so anpassen, dass er die Paginierung berücksichtigt und Daten von allen Seiten extrahiert. Dies kann in der Regel durch das Verfolgen von Links oder die Verwendung einer Paginierungssteuerung, wie z. B. einer „Weiter“-Schaltfläche, erfolgen, um zur nächsten Datenseite zu navigieren.
  • Umgang mit AJAX: Wenn die HTML-Tabelle mithilfe von AJAX oder JavaScript generiert wird, müssen Sie möglicherweise ein Tool wie Selenium verwenden, um das JavaScript auszuführen und die Daten in die Tabelle zu laden. Selenium ist eine Web-Testbibliothek, die die Interaktion eines Benutzers mit einer Webseite simulieren kann und es Ihnen ermöglicht, dynamisch generierte Daten zu scrapen. Eine gute Alternative dazu ist die Verwendung unseres Scrapers, der die Daten zurückgeben kann, nachdem JavaScript auf der Seite gerendert wurde. Weitere Informationen hierzu finden Sie in unserer Dokumentation.
  • Fehlerbehandlung: Es ist wichtig, Fehler und Ausnahmen in Ihrem Scraper elegant zu behandeln, da Netzwerk- oder Serverprobleme dazu führen können, dass Anfragen fehlschlagen oder Daten unvollständig sind. Sie können try/except-Blöcke verwenden, um Ausnahmen abzufangen und sie angemessen zu behandeln, z. B. durch erneutes Ausführen der Anfrage oder Protokollieren des Fehlers.
  • Skalierung des Scrapers: Wenn Sie große Datenmengen aus mehreren Tabellen oder Websites scrapen müssen, ist es möglicherweise erforderlich, Ihren Scraper zu skalieren, um die erhöhte Arbeitslast zu bewältigen. Dies kann durch Techniken wie parallele Verarbeitung oder die Verteilung der Arbeit auf mehrere Maschinen erreicht werden.

Durch die Verbesserung und Optimierung Ihres Web-Scrapers können Sie Daten effizienter und effektiver extrahieren und sicherstellen, dass Ihr Scraper zuverlässig und skalierbar ist. Im nächsten Abschnitt werden wir erörtern, warum die Nutzung eines professionellen Scraper-Dienstes eine bessere Option sein kann als die Entwicklung eines eigenen Scrapers.

Zusammenfassung

In diesem Artikel haben wir die Grundlagen des Web-Scrapings behandelt und Ihnen gezeigt, wie Sie einen einfachen Python-Scraper erstellen, um Daten aus einer HTML-Tabelle zu extrahieren. Auch wenn die Erstellung eines eigenen Scrapers eine nützliche und lehrreiche Übung sein kann, gibt es eine Reihe von Gründen, warum die Nutzung eines professionellen Scraper-Dienstes in vielen Fällen die bessere Option sein kann:

  • Professionelle Scraper sind in der Regel zuverlässiger und effizienter, da sie für Web-Scraping in großem Maßstab entwickelt und optimiert wurden.
  • Professionelle Scraper verfügen oft über Funktionen und Fähigkeiten, die in selbst erstellten Scrapern nicht verfügbar sind, wie z. B. die Unterstützung von CAPTCHAs, Ratenbegrenzung und die Verarbeitung von AJAX und JavaScript.
  • Die Nutzung eines professionellen Scrapers kann Ihnen Zeit und Ressourcen sparen, da Sie keinen eigenen Scraper erstellen und warten müssen.
  • Professionelle Scraper bieten oft verschiedene Preisoptionen und können kostengünstiger sein als die Entwicklung eines eigenen Scrapers, insbesondere wenn Sie große Datenmengen scrapen müssen.

Die Entwicklung eines eigenen Scrapers kann zwar eine lohnende Erfahrung sein, doch in vielen Fällen ist es praktischer und kostengünstiger, einen professionellen Scraper-Dienst zu nutzen. Letztendlich hängt die Entscheidung, ob Sie einen eigenen Scraper entwickeln oder einen professionellen Dienst nutzen, von Ihren spezifischen Anforderungen und Ressourcen ab.

Ich hoffe, dieser Artikel hat Ihnen einen hilfreichen Überblick über Web Scraping und den Prozess der Erstellung eines einfachen HTML-Tabellen-Scrapers mit Python gegeben.

Über den Autor
Andrei Ogiolan, Full-Stack-Entwickler @ WebScrapingAPI
Andrei OgiolanFull-Stack-Entwickler

Andrei Ogiolan ist Full-Stack-Entwickler bei WebScrapingAPI, wo er in verschiedenen Bereichen des Produkts mitwirkt und dabei hilft, zuverlässige Tools und Funktionen für die Plattform zu entwickeln.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.