Web Scraping mit Python
Extrahiere Daten von Websites mit Python — requests und BeautifulSoup für statische Seiten, Paginierung und ethisches Scraping unter Beachtung der DSGVO.
🔄 Kurzer Rückblick: In der letzten Lektion hast du Datenverarbeitung mit pandas automatisiert — Spreadsheets lesen, bereinigen und transformieren. Jetzt holen wir uns Daten direkt aus dem Web: Informationen von Websites extrahieren, wenn keine API oder kein Download verfügbar ist.
Web Scraping verwandelt unstrukturierte Webseiten in strukturierte Daten. Preismonitoring, Stellenanzeigen-Aggregation, News-Tracking, Wettbewerbsanalyse — wenn die Daten auf einer Webseite stehen, kann Python sie extrahieren.
Der Scraping-Stack
pip install requests beautifulsoup4 lxml
| Library | Zweck |
|---|---|
| requests | Webseiten herunterladen (HTTP-Requests) |
| BeautifulSoup | HTML parsen und Daten extrahieren |
| lxml | Schneller HTML-Parser (von BeautifulSoup genutzt) |
Skript 1: Einfacher Seiten-Scraper
KI-Prompt:
Schreib einen Python-Web-Scraper mit requests und BeautifulSoup: (1) Webseite von einer URL abrufen, (2) Alle Produktnamen und Preise extrahieren (Produkte in Elementen mit Klasse „product", h2 für Name, span.price für Preis), (3) Als CSV speichern mit Spalten: name, preis, url, scraping_datum, (4) Behandeln: HTTP-Fehler, Verbindungs-Timeouts, fehlende Elemente. Ordentliche Headers mit User-Agent-String.
Core BeautifulSoup-Operationen:
| Operation | Code | Was es tut |
|---|---|---|
| Ein Element finden | soup.find("h2", class_="title") | Erstes passendes Element |
| Alle Elemente finden | soup.find_all("div", class_="product") | Alle passenden Elemente |
| Text holen | element.get_text(strip=True) | Textinhalt, Whitespace entfernt |
| Attribut holen | element["href"] | HTML-Attributwert |
| CSS-Selektor | soup.select("div.product h2") | CSS-Selektor-Syntax |
DSGVO und Web Scraping: Was du in Deutschland wissen musst
In Deutschland gelten beim Scraping strengere Regeln als in den USA. Die DSGVO setzt klare Grenzen:
| Aspekt | Regel | Konsequenz |
|---|---|---|
| Personenbezogene Daten | Dürfen nicht ohne Rechtsgrundlage erhoben werden | Namen, E-Mails, Profile → DSGVO-relevant |
| robots.txt | Technisch unverbindlich, aber juristisch relevant | Missachtung kann als Verstoß gewertet werden |
| Urheberrecht | Datenbankrichtlinie der EU schützt Datensammlungen | Ganze Produktkataloge scrapen kann Urheberrecht verletzen |
| AGB/Nutzungsbedingungen | Vertragliche Regelung | Verstoß kann abmahnfähig sein |
Faustregel: Öffentliche, nicht-personenbezogene Sachdaten (Preise, Wetter, Fahrpläne) sind in der Regel okay. Personenbezogene Daten und geschützte Datenbanken: Finger weg ohne Rechtsgrundlage.
Ethisches Scraping
| Praxis | Warum | Wie |
|---|---|---|
| robots.txt prüfen | Sites geben an, was erlaubt ist | requests.get(url + "/robots.txt") |
| Rate Limits respektieren | Server nicht überlasten | time.sleep(random.uniform(1, 3)) |
| Identifiziere dich | Seitenbetreiber kann dich kontaktieren | User-Agent: MeinProjekt (email@example.com) |
| Responses cachen | Gleiche Seite nicht nochmal anfragen | HTML lokal speichern, vor Request prüfen |
| Nach API suchen | APIs sind zuverlässiger und erlaubt | Entwickler-Docs der Website prüfen |
✅ Quick Check: Du scrapst eine Seite, aber
requests.get()liefert HTML ohne die Daten, die du im Browser siehst. Die Seite lädt Daten per JavaScript nach dem initialen HTML. Was brauchst du? (Antwort: Für JavaScript-gerenderte Seiten reicht requests + BeautifulSoup nicht, weil sie nur das initiale HTML vor JavaScript-Ausführung sehen. Optionen: (1) Prüfe ob das JavaScript Daten von einer API lädt — Browser-DevTools Netzwerk-Tab nach dem API-Endpunkt suchen, dann direkt mit requests aufrufen. Das ist der beste Ansatz. (2) Selenium oder Playwright nutzen, um die Seite mit einem echten Browser zu rendern.)
Key Takeaways
- Immer ethisch scrapen: robots.txt prüfen, Pausen zwischen Requests (1-3 Sekunden), ehrlichen User-Agent setzen und zuerst nach einer API schauen — aggressives Scraping führt zu IP-Sperren und kann gegen Nutzungsbedingungen verstoßen
- In Deutschland gilt die DSGVO auch beim Scraping: personenbezogene Daten nicht ohne Rechtsgrundlage erheben, Datenbankrechte der EU beachten, und im Zweifel die AGB der Website lesen
- KI glänzt beim mühsamsten Teil des Scrapings — CSS-Selektoren finden: HTML in die KI einfügen, beschreiben welche Daten du brauchst, und die KI identifiziert die exakten Selektoren
Up Next
In der nächsten Lektion lernst du API-Integration — direkte Verbindung zu Webdiensten (kein HTML-Parsing nötig) für zuverlässigere Datenautomatisierung.
Wissenscheck
Erst das Quiz oben abschließen
Lektion abgeschlossen!