Webscraping mit Python und BeautifulSoup
Mit Python und BeautifulSoup liest du Daten aus Webseiten automatisch aus. In diesem Beitrag lernst du die Grundlagen des Webscrapings inklusive fairer Praxis.
Viele interessante Daten stehen nur auf Webseiten und nicht in einer praktischen Datei oder API zur Verfügung. Mit Webscraping kannst du diese Informationen automatisch auslesen. In Python ist die Kombination aus der Bibliothek requests zum Herunterladen und BeautifulSoup zum Auswerten des HTML der Klassiker. In diesem Beitrag zeige ich dir, wie du eine Seite lädst, gezielt Elemente herausziehst und dabei fair und verantwortungsvoll vorgehst.
Die Werkzeuge installieren
Zuerst brauchst du zwei Pakete. Du installierst sie bequem über pip. requests kümmert sich um den HTTP-Download, beautifulsoup4 um das Parsen des HTML-Codes.
pip install requests beautifulsoup4
Danach kannst du beide direkt in deinem Skript importieren. BeautifulSoup wird üblicherweise als bs4 importiert.
Eine Seite herunterladen
Bevor du etwas auswerten kannst, lädst du den HTML-Inhalt der Seite herunter. Das übernimmt requests.get. Wichtig ist, den Statuscode zu prüfen, damit du weißt, ob die Anfrage erfolgreich war.
import requests
url = "https://example.com"
antwort = requests.get(url, timeout=10)
if antwort.status_code == 200:
print("Erfolgreich geladen")
html = antwort.text
else:
print("Fehler:", antwort.status_code)
Der Statuscode 200 bedeutet Erfolg. Mit antwort.text bekommst du den rohen HTML-Quelltext als Zeichenkette.
HTML mit BeautifulSoup parsen
Jetzt kommt BeautifulSoup ins Spiel. Es wandelt den HTML-Text in eine durchsuchbare Baumstruktur um. Mit find findest du das erste passende Element, mit find_all alle.
from bs4 import BeautifulSoup
html = "<html><body><h1>Willkommen</h1><p>Hallo Welt</p></body></html>"
soup = BeautifulSoup(html, "html.parser")
print(soup.find("h1").text) # Willkommen
print(soup.find("p").text) # Hallo Welt
Mit .text holst du den reinen Text ohne die umgebenden HTML-Tags heraus. Das ist meist genau das, was du brauchst.
Gezielt Elemente auswählen
In der Praxis willst du oft bestimmte Elemente anhand ihrer CSS-Klasse oder ihres Tags finden. BeautifulSoup unterstützt dafür Attribute und CSS-Selektoren über select.
from bs4 import BeautifulSoup
html = """
<ul>
<li class="artikel">Python lernen</li>
<li class="artikel">Webscraping</li>
</ul>
"""
soup = BeautifulSoup(html, "html.parser")
for element in soup.find_all("li", class_="artikel"):
print(element.text)
# Alternative mit CSS-Selektor
for element in soup.select("li.artikel"):
print(element.text)
Beachte das Schlüsselwort class_ mit Unterstrich, da class in Python reserviert ist. Mit select kannst du vertraute CSS-Selektoren verwenden.
Links und Attribute auslesen
Häufig interessieren dich nicht nur Texte, sondern auch Attribute wie die Ziel-URL eines Links. Auf Attribute greifst du wie auf ein Dictionary zu.
from bs4 import BeautifulSoup
html = '<a href="https://meinecodereise.de">Mein Blog</a>'
soup = BeautifulSoup(html, "html.parser")
link = soup.find("a")
print(link.text) # Mein Blog
print(link["href"]) # https://meinecodereise.de
So sammelst du zum Beispiel alle Links einer Seite ein. Mit link.get("href") gehst du auf Nummer sicher, falls das Attribut einmal fehlt.
Fair und verantwortungsvoll scrapen
Webscraping bringt Verantwortung mit sich. Halte dich an einige Regeln, damit du Server nicht überlastest und niemandem schadest:
- Prüfe die
robots.txtder Seite und respektiere die Nutzungsbedingungen. - Baue mit
time.sleepkleine Pausen zwischen den Anfragen ein. - Setze einen aussagekräftigen User-Agent und übertreibe es nicht mit der Anzahl der Anfragen.
- Bevorzuge eine offizielle API, wenn es eine gibt.
import time
import requests
urls = ["https://example.com/seite1", "https://example.com/seite2"]
for url in urls:
antwort = requests.get(url, headers={"User-Agent": "MeinLernBot/1.0"})
print(url, antwort.status_code)
time.sleep(1) # höfliche Pause
Fazit
Mit requests und BeautifulSoup hast du ein einfaches, aber mächtiges Werkzeug, um Daten aus Webseiten auszulesen. Du lädst die Seite herunter, parst das HTML und ziehst mit find, find_all oder select gezielt die Inhalte heraus, die dich interessieren. Denk dabei immer an einen fairen Umgang: Pausen einbauen, robots.txt beachten und APIs bevorzugen. So wird Webscraping zu einer nützlichen Fähigkeit für deine Datenprojekte, ohne dass du dir oder anderen Probleme bereitest.