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

  1. pyfetch sendet eine asynchrone Anfrage, daher verwendet das Programm await auf oberster Ebene.
  2. Die Statusprüfung verhindert, dass Fehlerseiten als Zieldokument geparst werden.
  3. response.string() liest den Antwortinhalt, den BeautifulSoup mit html.parser parst.
  4. find("h1") gibt die erste Überschrift zurück, während find_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-SignalBedeutung
Requests zeigt einen GET auf raw.githubusercontent.comDer Scraper hat versucht, die HTML-Fixture herunterzuladen
Request-Status ist 200Der Browser hat die Seite erfolgreich empfangen
Request fehlgeschlagen oder blockiertVerbindung und Cross-Origin-Freigabe der Zielseite prüfen
Packages listet beautifulsoup4web.run hat den bs4-Import erkannt und das unterstützte Paket geladen
Status 200, aber extrahierte Werte fehlenNetzwerk 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

  1. Wählen Sie eine Seite, die automatisierten Zugriff und Browser-Anfragen erlaubt.
  2. Laden Sie das HTML und lehnen Sie nicht-erfolgreiche HTTP-Statuscodes vor dem Parsen ab.
  3. Erstellen Sie ein einzelnes BeautifulSoup-Objekt aus dem Antwortinhalt.
  4. Untersuchen Sie das Markup und wählen Sie Elemente nach semantischem Tag, Attribut oder CSS-Selektor aus.
  5. 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.

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

AufgabeSelektorErgebnis
Erste Seitenüberschriftsoup.find("h1")Ein Tag oder None
Alle Linkssoup.find_all("a")Eine Liste von Tags
Links mit Zielsoup.select("a[href]")Tags, die einem CSS-Selektor entsprechen
Elemente innerhalb eines Artikelssoup.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

  1. 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.
  2. 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.
  3. 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.