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.