Web-Scraping mit BeautifulSoup

Ein praktischer Leitfaden zum Extrahieren von Daten aus Websites

Lernen Sie, wie man mit BeautifulSoup in Python Daten aus Websites extrahiert. Dieses Tutorial behandelt praktische Techniken für Web-Scraping, einschließlich HTML-Parsing, Datenextraktion, Umgang mit Tabellen, Paginierung und Verwendung von Sitzungen für eine robuste Datenerfassung.

Programmierung
Autor:in
Zugehörigkeit
Veröffentlichungsdatum

8. Februar 2024

Geändert

29. April 2025

Schlüsselwörter

BeautifulSoup-Anleitung, Web-Scraping mit Python, Web-Scraping Python, Datenextraktion mit BeautifulSoup

Einführung

Web-Scraping ist eine leistungsfähige Technik zur Extraktion von Daten aus Websites für Analyse, Forschung oder andere datengesteuerte Projekte. In diesem Tutorial lernen Sie, wie Sie BeautifulSoup - eine beliebte Python-Bibliothek - verwenden, um HTML zu parsen und aussagekräftige Informationen aus Webseiten zu extrahieren. Wir werden nicht nur grundlegende Beispiele wie das Extrahieren von Seitentiteln und Links behandeln, sondern auch fortgeschrittene Techniken wie das Extrahieren von Tabellen, die Handhabung von Paginierung und die Verwendung von Sitzungen, um den Status über mehrere Anfragen hinweg zu erhalten.



Erforderliche Pakete importieren

Um unseren Code übersichtlich zu halten und Wiederholungen zu vermeiden, importieren wir zunächst die erforderlichen Pakete. Dadurch wird sichergestellt, dass alle nachfolgenden Codeabschnitte Zugriff auf die erforderlichen Bibliotheken haben.

#| label: import-packages
# Dieser Code importiert die wichtigsten Pakete für Web-Scraping.
import requests
from bs4 import BeautifulSoup

Grundlegendes Web-Scraping-Beispiel

Lassen Sie uns zunächst demonstrieren, wie man eine Webseite abruft, ihr HTML analysiert und den Seitentitel extrahiert.

#| label: basic-scraping
# Definieren Sie die zu scrappende URL
url = "https://www.worldometers.info/world-population/population-by-country/"

# Abrufen der Webseite
response = requests.get(url)
# Parsen des HTML-Inhalts
soup = BeautifulSoup(response.text, "html.parser")

# Extrahieren und Drucken des Seitentitels
page_title = soup.title.string
print("Page Title:", page_title)

Ergebnisse:

Page Title: Population by Country (2025) - Worldometer

Tabellen extrahieren

Viele Webseiten stellen Daten in Tabellen dar. Sie können BeautifulSoup verwenden, um Tabellendaten zu extrahieren und in ein strukturiertes Format zu konvertieren.

#| label: extract-tables
# Finden Sie eine Tabelle anhand ihres Tags (oder mit zusätzlichen Attributen, z. B. class oder id)
table = soup.find("table")
# Tabellenüberschriften extrahieren
headers = [header.text.strip() for header in table.find_all("th")]

# Tabellenzeilen extrahieren
rows = []
for row in table.find_all("tr")[1:]:
    cells = [cell.text.strip() for cell in row.find_all("td")]
    if cells:
        rows.append(cells)

# Erstellen Sie eine `DataFrame` mit den extrahierten Kopfzeilen und Zeilen
df = pd.DataFrame(rows, columns=headers)
df.head()

Extrahierte Tabelle

Paginierung behandeln

Bei Websites, die Daten über mehrere Seiten anzeigen, können Sie den Prozess der Iteration durch die Seiten automatisieren.

Das folgende Skript durchsucht die Blogbeiträge, indem es den Titel jedes Beitrags (aus dem Ankertext) und die URL (aus dem href-Attribut des Ankers) extrahiert:

#| label: pagination-example
import time

def scrape_page(url):
    response = requests.get(url)
    return BeautifulSoup(response.text, "html.parser")

# Die Website verwendet einen Abfrageparameter `#listing-listing-page=` für die Paginierung
base_url = "https://quarto.org/docs/blog/#listing-listing-page="
page_number = 1
all_data = []

# Beispiel: Scraping der ersten 2 Seiten
while page_number <= 2:
    url = base_url + str(page_number)
    soup = scrape_page(url)    
    # Blog-Beiträge extrahieren: 
    # Jeder Titel und jede URL befindet sich innerhalb einer `<h3 class='no-anchor listing-title'>` 
    posts = []
    for h3 in soup.find_all("h3", class_="no-anchor listing-title"):
        a_tag = h3.find("a")
        if a_tag:
            title = a_tag.text.strip()
            link = a_tag.get("href")
            posts.append({"title": title, "url": link})
    
    all_data.extend(posts)
    page_number += 1
    # Respektvolle Verzögerung zwischen den Anfragen
    time.sleep(1)  

# Konvertieren Sie die Ausgabe in einen DataFrame und drucken Sie die Daten
df = pd.DataFrame(all_data)
df.head()

Extrahierte Blogbeiträge

Wie es funktioniert

  • Seitenaufbau: Das Skript erstellt die URL für jede Seite mithilfe eines Abfrageparameters (z. B. #listing-listing-page=1, #listing-listing-page=2).
  • Scraping der Seite: Für jede Seite lädt die Funktion scrape_page den HTML-Code herunter und parst ihn.
  • Extrahieren von Beiträgen: Es sucht nach <h3>-Tags mit der Klasse 'no-anchor listing-title', findet das untergeordnete <a>-Tag und extrahiert den Titel (mit .text) und die URL (mit .get('href')).
  • Daten sammeln: Die Daten eines jeden Beitrags werden als Wörterbuch in der Liste all_data gespeichert.

Sitzungen verwenden

Beim Scraping mehrerer Seiten derselben Website kann die Verwendung einer Sitzung die Leistung verbessern, indem Einstellungen (wie Header und Cookies) wiederverwendet und der Status beibehalten wird.

#| label: using-sessions
# Ein Session-Objekt erstellen
session = requests.Session()
session.headers.update({"User-Agent": "Mozilla/5.0"})

# Verwenden Sie die Sitzung, um Anfragen zu stellen
url = "https://www.worldometers.info/world-population/population-by-country/"
response = session.get(url)
soup = BeautifulSoup(response.text, "html.parser")
print("Session-based Page Title:", soup.title.string)

Best Practices für Web-Scraping

  • Website-Richtlinien respektieren:
    Prüfen Sie vor dem Scraping immer die robots.txt und die Nutzungsbedingungen einer Website.

  • Ratenbegrenzung:
    Verwenden Sie Verzögerungen (z. B. time.sleep()) zwischen den Anfragen, um die Website nicht zu überlasten.

  • Fehlerbehandlung:
    Robuste Fehlerbehandlung zur Bewältigung von Verbindungsproblemen und unerwarteten HTML-Strukturen.

Hinweis

Stellen Sie sicher, dass Ihre Web-Scraping-Aktivitäten den rechtlichen und ethischen Richtlinien entsprechen.

Schlussfolgerung

Web-Scraping mit BeautifulSoup ist eine effektive Methode, um Daten aus Websites zu extrahieren und zu verarbeiten. Durch die Kombination grundlegender Techniken mit fortgeschrittenen Strategien wie Tabellenextraktion, Paginierung und Sitzungsmanagement können Sie robuste Datenerfassungspipelines für Ihre Data-Science-Projekte erstellen. Experimentieren Sie mit diesen Beispielen, passen Sie sie an Ihre spezifischen Bedürfnisse an und praktizieren Sie stets ethisches Scraping.

Weiterführende Literatur

Viel Spaß beim Programmieren und beim Erforschen der Möglichkeiten von Web-Scraping mit BeautifulSoup!

Weitere Artikel erkunden

Hinweis

Hier finden Sie weitere Artikel aus derselben Kategorie, die Ihnen helfen, tiefer in das Thema einzutauchen.

placeholder

placeholder
Keine Treffer
Zurück nach oben

Wiederverwendung

Zitat

Mit BibTeX zitieren:
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Web-Scraping mit BeautifulSoup},
  date = {2024-02-08},
  url = {https://www.datanovia.com/de/learn/programming/python/tools/web-scraping-with-beautifulsoup.html},
  langid = {de}
}
Bitte zitieren Sie diese Arbeit als:
Kassambara, Alboukadel. 2024. “Web-Scraping mit BeautifulSoup.” February 8, 2024. https://www.datanovia.com/de/learn/programming/python/tools/web-scraping-with-beautifulsoup.html.