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
= "https://www.worldometers.info/world-population/population-by-country/"
url
# Abrufen der Webseite
= requests.get(url)
response # Parsen des HTML-Inhalts
= BeautifulSoup(response.text, "html.parser")
soup
# Extrahieren und Drucken des Seitentitels
= soup.title.string
page_title 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)
= soup.find("table")
table # Tabellenüberschriften extrahieren
= [header.text.strip() for header in table.find_all("th")]
headers
# Tabellenzeilen extrahieren
= []
rows for row in table.find_all("tr")[1:]:
= [cell.text.strip() for cell in row.find_all("td")]
cells if cells:
rows.append(cells)
# Erstellen Sie eine `DataFrame` mit den extrahierten Kopfzeilen und Zeilen
= pd.DataFrame(rows, columns=headers)
df df.head()
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):
= requests.get(url)
response return BeautifulSoup(response.text, "html.parser")
# Die Website verwendet einen Abfrageparameter `#listing-listing-page=` für die Paginierung
= "https://quarto.org/docs/blog/#listing-listing-page="
base_url = 1
page_number = []
all_data
# Beispiel: Scraping der ersten 2 Seiten
while page_number <= 2:
= base_url + str(page_number)
url = scrape_page(url)
soup # 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"):
= h3.find("a")
a_tag if a_tag:
= a_tag.text.strip()
title = a_tag.get("href")
link "title": title, "url": link})
posts.append({
all_data.extend(posts)+= 1
page_number # Respektvolle Verzögerung zwischen den Anfragen
1)
time.sleep(
# Konvertieren Sie die Ausgabe in einen DataFrame und drucken Sie die Daten
= pd.DataFrame(all_data)
df df.head()
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
= requests.Session()
session "User-Agent": "Mozilla/5.0"})
session.headers.update({
# Verwenden Sie die Sitzung, um Anfragen zu stellen
= "https://www.worldometers.info/world-population/population-by-country/"
url = session.get(url)
response = BeautifulSoup(response.text, "html.parser")
soup print("Session-based Page Title:", soup.title.string)
Best Practices für Web-Scraping
Website-Richtlinien respektieren:
Prüfen Sie vor dem Scraping immer dierobots.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.
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
- Python-Automatisierung: Zeitplanung und Aufgabenautomatisierung
- Erstellung von REST-APIs mit FastAPI: Ein modernes Python-Framework
- Unit Testing in Python mit pytest: Ein umfassendes Handbuch
Viel Spaß beim Programmieren und beim Erforschen der Möglichkeiten von Web-Scraping mit BeautifulSoup!
Weitere Artikel erkunden
Hier finden Sie weitere Artikel aus derselben Kategorie, die Ihnen helfen, tiefer in das Thema einzutauchen.
Wiederverwendung
Zitat
@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}
}