Python-Programm zum Extrahieren von Website-Inhalten
Ein Python-Programm zum Scrapen von Website-Inhalten lädt HTML herunter und extrahiert ausgewählte Elemente. BeautifulSoup wandelt die Markup-Daten in einen durchsuchbaren Baum aus Tags, Attributen, Text und Links um. Die Vorgehensweise ist: Anfrage, Validierung, Parsen, Selektion und Speicherung. In web.run läuft Python über Pyodide, sodass Netzwerk- und Paketaktivität ebenfalls in Run Details erscheinen.
Python-Programm zum Scrapen von Website-HTML
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
Title: Header
Links found: 9
So Funktioniert Dieses Beispiel
pyfetchsendet eine asynchrone Anfrage, daher verwendet das Programmawaitauf oberster Ebene.- Die Statusprüfung verhindert, dass Fehlerseiten als Zieldokument geparst werden.
response.string()liest den Antwortinhalt, den BeautifulSoup mithtml.parserparst.find("h1")gibt die erste Überschrift zurück, währendfind_all("a")alle Links liefert.
Den Scraper mit Run Details Prüfen
Öffnen Sie Run Details nach dem Programmende. Es trennt die Seitenanfrage des Scrapers von der Paketaktivität, die zur Codeausführung benötigt wird.
| Run Details-Signal | Bedeutung |
|---|---|
| Requests zeigt einen GET auf raw.githubusercontent.com | Der Scraper hat versucht, die HTML-Fixture herunterzuladen |
| Request-Status ist 200 | Der Browser hat die Seite erfolgreich empfangen |
| Request fehlgeschlagen oder blockiert | Verbindung und Cross-Origin-Freigabe der Zielseite prüfen |
| Packages listet beautifulsoup4 | web.run hat den bs4-Import erkannt und das unterstützte Paket geladen |
| Status 200, aber extrahierte Werte fehlen | Netzwerk funktioniert; HTML und Selektoren prüfen |
Die Dauer neben der Anfrage misst den Seitenabruf; die Gesamtdauer umfasst auch Paketladen, Parsen und Python-Ausführung. BeautifulSoup wird normalerweise beim ersten Lauf heruntergeladen und bleibt in der aktuellen Laufzeit verfügbar, sodass spätere Läufe schneller abschließen und keine neue Paketaktivität zeigen.
Eine Website mit Python Scrapen
- Wählen Sie eine Seite, die automatisierten Zugriff und Browser-Anfragen erlaubt.
- Laden Sie das HTML und lehnen Sie nicht-erfolgreiche HTTP-Statuscodes vor dem Parsen ab.
- Erstellen Sie ein einzelnes BeautifulSoup-Objekt aus dem Antwortinhalt.
- Untersuchen Sie das Markup und wählen Sie Elemente nach semantischem Tag, Attribut oder CSS-Selektor aus.
- Normalisieren Sie extrahierten Text und lösen Sie relative URLs auf, bevor Sie die Ergebnisse speichern.
Weitere Python-BeautifulSoup-Beispiele
Alle Abschnittsüberschriften extrahieren
Verwenden Sie einen CSS-Selektor, um mehrere Überschriftenebenen zu sammeln:
for heading in soup.select("h2, h3"):
print(heading.get_text(" ", strip=True))
Das Trennzeichen hält Text aus verschachtelten Tags auseinander, während strip=True umgebende Leerzeichen entfernt.
Links extrahieren und normalisieren
Absolute, relative und Fragment-Links gegen die Seiten-URL auflösen:
from urllib.parse import urljoin
for link in soup.select("a[href]"):
print(urljoin(url, link["href"]))
Der [href]-Selektor schließt Anker ohne Ziel aus und macht den Attributzugriff sicher.
BeautifulSoup-Selektoren Wählen
| Aufgabe | Selektor | Ergebnis |
|---|---|---|
| Erste Seitenüberschrift | soup.find("h1") | Ein Tag oder None |
| Alle Links | soup.find_all("a") | Eine Liste von Tags |
| Links mit Ziel | soup.select("a[href]") | Tags, die einem CSS-Selektor entsprechen |
| Elemente innerhalb eines Artikels | soup.select("article .item") | Nur passende Nachfahren |
Verwenden Sie find, wenn ein Element erwartet wird, find_all für eine Tag-basierte Sammlung und select, wenn Beziehungen oder Attribute einen CSS-Selektor klarer machen.
Häufige Fehler beim Python-Web-Scraping
- Nicht jede URL ist erreichbar. Pyodide läuft im Browser, sodass eine Seite in einem Tab geöffnet werden kann, aber eine Cross-Origin-Anfrage von web.run ablehnt.
- Fehlende Elemente erfordern eine explizite Prüfung. BeautifulSoup gibt kein Tag zurück, wenn ein Selektor nicht übereinstimmt; sofortiger Textzugriff würde einen Fehler auslösen.
- JavaScript-generierter Inhalt fehlt im heruntergeladenen HTML. BeautifulSoup parst die Server-Antwort, führt aber keine Skripte aus; prüfen Sie den Antwortinhalt, wenn ein Selektor keine Treffer zurückgibt.
Crawling-Regeln einhalten, Anfragehäufigkeit begrenzen, unveränderte Seiten zwischenspeichern und bei zu vielen Anfragen zurückziehen.
Für die umgebende Kontrollstruktur siehe Python-Ausnahmebehandlung und Python-Bedingungsabfragen.
FAQ
Welche Python-Bibliothek wird für Web-Scraping verwendet?
BeautifulSoup parst und durchsucht heruntergeladenes HTML. Ein Netzwerk-Client wie pyfetch ruft das Dokument ab, während BeautifulSoup Elemente nach Tag, Attribut oder CSS-Selektor auswählt.
Kann BeautifulSoup JavaScript-Websites scrapen?
BeautifulSoup parst server-seitig bereitgestelltes HTML, führt aber kein JavaScript aus. Elemente, die erst nach der Skriptausführung erstellt werden, erscheinen nicht im geparsten Dokument.