Wie man Tabellen aus Webseiten ausliest - ein Python-Tutorial

Anleitungen, Python, Scraping, 13.12.20245 Min. gelesen

Web Scraping ist für Python-Entwickler, Datenanalysten und alle, die mit Datensätzen arbeiten, zu einer wichtigen Fähigkeit geworden. Wenn es um strukturierte und umfangreiche Daten geht, sind Tabellen auf Websites oft eine wahre Fundgrube an Informationen. Ganz gleich, ob Sie das Web nach Produktkatalogen, Sportstatistiken oder Finanzdaten durchsuchen, die Fähigkeit, Tabellendaten mit Python zu extrahieren und zu speichern, ist ein unschätzbares Werkzeug.

Diese praktische Anleitung führt Sie Schritt für Schritt durch den Prozess des Scrapens von Tabellen aus Websites mit Python. Am Ende werden Sie wissen, wie Sie beliebte Bibliotheken wie Requests, Beautiful Soup und sogar Pandas verwenden können, um auf Tabellendaten zuzugreifen und sie in wiederverwendbaren Formaten wie CSV-Dateien zu speichern.

Voraussetzungen

Bevor wir uns in die technischen Details stürzen, erfahren Sie hier, was Sie zum Mitmachen brauchen:

  • Stellen Sie sicher, dass Python auf Ihrem System installiert ist. Sie können die neueste Version hier herunterladen.
  • Erforderliche Bibliotheken:
    • requests - ZumAbrufen des HTML-Inhalts von Websites. Es ist ein beliebtes Paket zum Senden von HTTP-Anfragen in Python.
    • Beautiful Soup - eineleistungsstarke Bibliothek zum Parsen von HTML- und XML-Dokumenten. Wir werden sie verwenden, um bestimmte Elemente aus unserer Webseite zu extrahieren.
    • pandas - DieStandardbibliothek für Datenmanipulation und -analyse in Python. Dies wird unser endgültiges Ziel sein, wo wir die extrahierten Tabellendaten speichern.

Wir werden den Befehl pip verwenden, um die erforderlichen Bibliotheken zu installieren. Führen Sie einfach den folgenden Befehl in Ihrem Terminal aus, um die Installation abzuschließen:

pip install anfragen beautifulsoup4 pandas

Schritt-für-Schritt-Anleitung zum Scraping von Tabellen

Schritt 1: Verstehen der Website-Struktur

Der erste Schritt bei jedem Web-Scraping-Projekt besteht darin, die Struktur der Ziel-Website zu analysieren. In diesem Beispiel werden wir Daten von einer Beispiel-Website abrufen, die eine Tabelle mit den Tabellen der Eishockeymannschaften enthält. Unten sehen Sie eine Vorschau auf die Tabelle:

So sieht diese Tabelle in der HTML-Struktur aus.

Schritt 2: Senden einer HTTP-Anfrage

Der erste Schritt ist das Abrufen der Webseite, die Sie scrapen wollen. Wir verwenden die requests-Bibliothek, um eine HTTP-Anfrage zu senden und den HTML-Inhalt von der Dummy-Website abzurufen, die wir zum Abrufen des Tabelleninhalts verwenden

url = "https://www.scrapethissite.com/pages/forms/"

response = requests.get(url)

if response.status_code == 200:
   print("Page fetched successfully!")
   html_content = response.text
else:
   print(f"Failed to fetch the page. Status code: {response.status_code}")
   exit()

Schritt 3: Extrahieren von Daten aus der Tabelle

In HTML ist eine Tabelle eine strukturierte Art, Daten in Zeilen und Spalten darzustellen, genau wie in einer Tabellenkalkulation. Tabellen werden mit der Methode <table> Tag, und ihr Inhalt ist in Zeilen unterteilt (<tr>) und Zellen (<td> für Datenzellen oder <th> für Kopfzellen). Hier ist eine kurze Übersicht über die Struktur einer Tabelle:

  • Tabelle: Eingeschlossen in <table> Tags fungiert er als Container für alle Zeilen und Zellen.
  • Reihen: Jede <tr> (Tabellenzeile) stellt einen horizontalen Ausschnitt der Tabelle dar.
  • Zellen: Innerhalb jeder Reihe, <td> Tags enthalten einzelne Datenwerte (oder <th> Tags für Kopfzeilen).
  • Attribute: Tabellen haben oft Klassen, IDs oder andere Attribute, um sie zu gestalten oder zu identifizieren.

In diesem Skript suchen wir zum Beispiel nach der <table> Tag mit einer bestimmten Klasse (class="table") und extrahieren Sie dessen Zeilen und Zellen mit Schöne Suppe. So können wir die Daten systematisch herausziehen und für die Analyse oder Speicherung vorbereiten.

soup = BeautifulSoup(html_content, "html.parser")

table = soup.find("table", {"class": "table"})

if not table:
   print("No table found on the page!")
   exit()

Schritt 4: Speichern von Daten in einer CSV-Datei

In diesem Schritt speichern wir die extrahierten Tabellendaten für die spätere Verwendung in einer CSV-Datei und zeigen sie auch als Pandas DataFrame an, damit Sie sehen können, wie die Daten strukturiert sind. Wenn Sie die Daten als CSV-Datei speichern, können Sie sie später in Tools wie Excel, Google Sheets oder Python selbst analysieren.

headers = [header.text.strip() for header in table.find_all("th")]

rows = []
for row in table.find_all("tr", class_="team"):
   cells = [cell.text.strip() for cell in row.find_all("td")]
   rows.append(cells)

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

csv_filename = "scraped_table_data_pandas.csv"
df.to_csv(csv_filename, index=False, encoding="utf-8")

print(f"Data saved to {csv_filename}")

Wenn Sie diesen Code ausführen, erstellt Pandas eine Datei namens gekratzte_tabelle_daten.csv in Ihrem Arbeitsverzeichnis, und die extrahierten Daten werden wie folgt auf der Konsole ausgegeben:

          Mannschaft Name Jahr Siege Niederlagen OT Niederlagen Sieg % Tore für (GF) Tore gegen (GA) + / -
0 Boston Bruins 1990 44 24 0.55 299 264 35
1 Buffalo Sabres 1990 31 30 0,388 292 278 14
2 Calgary Flames 1990 46 26 0,575 344 263 81
3 Chicago Blackhawks 1990 49 23 0,613 284 211 73
4 Detroit Red Wings 1990 34 38 0,425 273 298 -25

Vollständiger Code: Scraping und Speichern von Tabellendaten

Nachfolgend finden Sie das vollständige Python-Skript zum Abrufen von Tabellendaten von einer Website, zum Speichern in einer CSV-Datei und zum Anzeigen der extrahierten Daten. Dieses Skript fasst alle in diesem Leitfaden behandelten Schritte in einem einzigen zusammenhängenden Arbeitsablauf zusammen.

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://www.scrapethissite.com/pages/forms/"

response = requests.get(url)

if response.status_code == 200:
    print("Page fetched successfully!")
    html_content = response.text
else:
    print(f"Failed to fetch the page. Status code: {response.status_code}")
    exit()

soup = BeautifulSoup(html_content, "html.parser")

table = soup.find("table", {"class": "table"})

if not table:
    print("No table found on the page!")
    exit()

headers = [header.text.strip() for header in table.find_all("th")]

rows = []
for row in table.find_all("tr", class_="team"):
    cells = [cell.text.strip() for cell in row.find_all("td")]
    rows.append(cells)

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

csv_filename = "scraped_table_data_pandas.csv"
df.to_csv(csv_filename, index=False, encoding="utf-8")

print(df.head())
print(f"Data saved to {csv_filename}")

Schlussfolgerung

Dieser Leitfaden führt Sie Schritt für Schritt durch den Prozess: Verstehen der Website-Struktur, Extrahieren der Daten und Speichern der Daten für die Analyse. Ganz gleich, ob Sie Datensätze für Forschungszwecke erstellen, die Datenerfassung automatisieren oder einfach nur die Möglichkeiten des Web Scraping erkunden möchten - die Beherrschung dieser Techniken eröffnet Ihnen eine Welt voller Möglichkeiten.

Beim Scraping können Sie auf Probleme wie IP-Sperren oder von Websites auferlegte Ratenbeschränkungen stoßen. Hier sind Proxys von entscheidender Bedeutung. Proxys ermöglichen es Ihnen,:

  • Umgehen Sie Ratenbeschränkungen: Drehen Sie IP-Adressen, um zu vermeiden, dass Websites zu viele Anfragen senden und Sie deshalb blockiert werden.
  • Anonymität bewahren: Halten Sie Ihre Identität verborgen, indem Sie Ihre echte IP-Adresse maskieren.
  • Zugriff auf geografisch eingeschränkte Daten: Verwenden Sie Proxys mit bestimmten Standorten, um regionalspezifische Inhalte abzurufen.

ProxyScrape bietet eine breite Palette von Proxys an, darunter Proxys für Privatanwender, Premium-Proxys, dedizierte Proxys und mobile Proxys, die speziell für Web-Scraping geeignet sind. Die zuverlässigen und skalierbaren Proxy-Lösungen helfen Ihnen, umfangreiche Scraping-Projekte ohne Unterbrechungen zu bewältigen und gewährleisten eine reibungslose und effiziente Datenerfassung.