Python Web Scraping im Jahr 2026: httpx + BeautifulSoup + Playwright – Wann man welches verwendet
Die meisten „Python Web Scraping“-Tutorials aus dem Jahr 2018 empfehlen immer noch „requests + BeautifulSoup“. Der „Anfragen“-Teil ist in Ordnung, aber es gibt jetzt bessere Standardeinstellungen und die Hälfte der modernen Web-Inhalte rendert Inhalte in JavaScript, sodass der klassische Stack stillschweigend leere Seiten zurückgibt.
Dieser Leitfaden behandelt den Entscheidungsbaum für 2026: Wann „httpx + BeautifulSoup“ richtig ist (immer noch über 90 % der Websites), wann Sie nach „Playwright“ greifen sollten, wie Sie eine Blockierung vermeiden können und die beiden Regeln, die Ihren Scraper sowohl legal als auch ethisch halten.
Der Entscheidungsbaum in einem Bild
Das ist es. Neunzig Prozent der Scraping-Aufgaben sind statisches HTML – der klassische Stack (umbenannt) ist das richtige Werkzeug. Der Rest benötigt JS-Ausführung und Playwright ist die moderne Antwort.
Schritt 1: httpx + BeautifulSoup (der 90 %-Fall)
„httpx“ ist der Drop-In-Ersatz für „Anfragen“. Gleiche API, plus HTTP/2-Unterstützung und native Asynchronisierung. „BeautifulSoup“ ist seit 2015 unverändert – die Wahl des Parsers ist wichtig („lxml“ ist 5x schneller als die Standardeinstellung).
Wichtige Entscheidungen:
- `headers={"User-Agent": ...}` – immer eine echte UA festlegen (eine Kontaktadresse ist höflich). Der standardmäßige „httpx“ UA wird oft blockiert.
- `timeout=10` – niemals eine unbegrenzte Anfrage stellen; Hängende Verbindungen lecken Dateideskriptoren.
- `raise_for_status()` – erhöht auf 4xx/5xx, sodass Fehler laut und nicht leise sind.
- `„lxml“`-Parser – 5x schneller als der Standard-
html.parserund verzeihender bei fehlerhaftem HTML. - `soup.select("css-selector")` – Behandeln Sie Scraping als „Stellen Sie sich vor, Sie verwenden JavaScripts „document.querySelectorAll““. CSS-Selektoren sind normalerweise das, was Sie wollen, nicht die Tree-Walking-API.
Schritt 2: Dramatiker (wenn JS den Inhalt rendert)
Viele moderne SPAs (React, Vue, Angular) liefern ein leeres „<div id="root">“ und hydratisieren alles clientseitig. Mit „httpx.get“ erhalten Sie eine leere Shell – die gewünschten Daten werden nach dem Laden der Seite über „fetch“ geladen.
Test: httpx.get(url).text – Suchen Sie nach den gewünschten Daten. Wenn es nicht vorhanden ist, benötigt die Site eine JS-Ausführung.
Installieren Sie: „pip install playwright && playwright install chromium“ (der Browser-Download beträgt ~150 MB – es lohnt sich einmal, ist bei jedem CI-Lauf ohne Caching schmerzhaft).
Kosten: Playwright ist 10-50x langsamer als „httpx“ (Seitenladen + JS-Ausführung + Browser-Overhead). Greifen Sie nur dann darauf zu, wenn sich die Daten nicht im statischen HTML-Code befinden.
Die vier Möglichkeiten, blockiert zu werden
Die meisten Anti-Scraping-Systeme achten auf diese vier Fingerabdrücke:
1. Fehlender/offensichtlicher User-Agent
2. Keine Verzögerung zwischen Anfragen
Rohe sequentielle Anfragen belasten den Server. Fügen Sie eine Verzögerung proportional zu ihrer Antwortzeit hinzu – wenn die Bereitstellung einer Seite 500 ms dauert, warten Sie zwischen den Anfragen 500–2000 ms. asyncio.sleep(random.uniform(0.5, 2.0)).
3. Anfordern von „/robots.txt“ unzulässigen Pfaden
Einige Websites verwenden „robots.txt“ für legitime Preissignale – überprüfen Sie dies vor dem Scraping:
4. TLS/Browser-Fingerabdruck stimmt nicht überein
Erweitertes Anti-Scraping (Cloudflare, DataDome) erfasst Ihren TLS-Handshake und Ihre JS-Umgebung. „httpx“ sieht auf der TLS-Ebene überhaupt nicht wie Chrome aus. Optionen:
- „curl_cffi“ – eine auf Curl-Imitieren basierende Bibliothek, die echtes Browser-TLS nachahmt.
- Dramatiker – echtes Browser-TLS per Definition.
- Wohn-Proxys rotieren – die nukleare Option.
Für 99 % der Anwendungsfälle (nicht feindselige Websites, mäßiges Volumen, keine Anmeldung erforderlich) ist „httpx“ + echtes UA + Verzögerung + „robots.txt“-Respekt ausreichend. Wenn Sie Cloudflare-geschützte Websites in großem Umfang durchsuchen, benötigen Sie echte Browser oder kostenpflichtige Entsperrungsdienste.
Rate, die sich selbst einschränkt (das Semaphor + Schlafmuster)
Kombinieren Sie für Massen-Scraping „asyncio.Semaphore“ (maximal gleichzeitig) mit „asyncio.sleep“ (Verzögerung pro Anfrage):
Durch die Begrenzung auf 5–10 gleichzeitige Zugriffe + 500 ms–2 s Verzögerung pro Anforderung bleiben Sie deutlich unter dem Wert, der auf den meisten Websites Ratenbegrenzungsalarme auslöst.
Rechtliche + ethische Regeln
1. Lesen Sie die Nutzungsbedingungen der Website. Viele verbieten Scraping völlig – Sie können es trotzdem tun (AGB sind Vertragsrecht, in den meisten Gerichtsbarkeiten kein Strafrecht), aber Sie gehen ein rechtliches Risiko ein. LinkedIn vs. hiQ (2022) stellte fest, dass das Scrapen öffentlich sichtbarer Daten in den USA kein CFAA-Verstoß darstellt, das Tragen eines Kapuzenpullovers Sie jedoch nicht unsichtbar macht.
2. Scrapen Sie keine personenbezogenen Daten. DSGVO / CCPA / alles andere bestraft das Sammeln personenbezogener Daten ohne Zustimmung. Wenn Sie einen Datensatz von „Mitarbeitern bei Unternehmen X“ erstellen, hören Sie auf.
Ethische Ergänzungen, die jeder vergisst:
- Senden Sie eine echte Kontaktadresse in Ihrer UA. Wenn Ihr Bot Probleme verursacht, sollte der Websitebesitzer Ihnen eine E-Mail senden können.
- Wenn Sie die Daten der Site zwischenspeichern, sollten Sie den Cache aggressiv durchführen – nicht bei jedem Aufruf die Server beschädigen.
- Bevorzugen Sie öffentliche APIs, auch wenn diese kostenpflichtig sind. Günstiger als rechtliches Risiko.
Die Werkzeugübersicht 2026
| Aufgabe | Greifen Sie nach |
|---|---|
| Statische HTML-Seiten | httpx + BeautifulSoup(html, "lxml") |
| JS-gerendertes SPA | „Dramatiker“ (kopfloses Chromium) |
| Cloudflare / Anti-Bot | „curl_cffi“ oder Playwright + Residential Proxy |
| Schaben mit hohem Volumen | httpx.AsyncClient + Semaphore + Sleep |
| Strukturierte API-Daten | „httpx.get“ + „.json()“ – keine Suppe erforderlich |
Web Scraping im Jahr 2026 besteht zu 90 % immer noch aus „httpx + BeautifulSoup“, und man weiß, wann man auf einen echten Browser umsteigen muss. Beherrschen Sie die Polite-Scraper-Gewohnheiten (echte UA, Semaphore, Sleep, robots.txt) und Sie werden dauerhafte Datenpipelines aufbauen, ohne blockiert oder verklagt zu werden.
Nächster Schritt: Der Data Science-Track behandelt Scraping, ETL und Pandas End-to-End – Sie erstellen eine echte End-to-End-Pipeline vom HTTP-Abruf über DataFrame bis hin zum CSV-Export.