Das Sammeln von Daten von Websites, allgemein bekannt als Web Scraping, ist eine praktische Technik für viele Projekte. Bibliotheken wie BeautifulSoup eignen sich hervorragend für einfaches HTML, stoßen jedoch oft an Grenzen, wenn Seiten stark auf JavaScript angewiesen sind, um Inhalte anzuzeigen. Hier kommt Selenium ins Spiel.
In diesem Leitfaden erfahren Sie, wie Sie Selenium mit Python effektiv zum Scrapen von Websites einsetzen.
Zuerst das Wichtigste – Was ist Selenium?
Selenium ist ein Framework zur Browser-Automatisierung, das für das Testen von Webanwendungen entwickelt wurde. Es simuliert echtes Nutzerverhalten, indem es einen tatsächlichen Browser wie Chrome oder Firefox steuert. Dadurch kann es JavaScript-gerenderte Inhalte verarbeiten, die andere Tools nicht können.
Das macht Selenium zu einer hervorragenden Lösung zum Scrapen von Inhalten von interaktiven Websites, Formularen, Infinite Scrolls und mehr.
Selenium installieren
Installieren Sie Selenium zunächst mit pip:
pip install selenium
WebDriver einrichten
Selenium benötigt einen WebDriver zur Kommunikation mit dem Browser. Hier ein einfaches Beispiel mit Chrome:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service("/path/to/chromedriver")
driver = webdriver.Chrome(service=service)
Wenn Sie den Browser ohne sichtbares Fenster ausführen möchten (nützlich auf Servern), aktivieren Sie den Headless-Modus:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless=new")
driver = webdriver.Chrome(options=options)
Elemente auf der Seite finden
Sie können verschiedene Strategien verwenden, um HTML-Elemente zu lokalisieren:
from selenium.webdriver.common.by import By
element = driver.find_element(By.CLASS_NAME, "product-title")
Weitere Locator-Optionen sind:
By.IDBy.TAG_NAMEBy.CSS_SELECTORBy.XPATH
Auf JavaScript-Laden warten
Statt time.sleep() zu verwenden, unterstützt Selenium intelligentes Warten mit WebDriverWait:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "content"))
)
JavaScript ausführen
Wenn Sie die Seite scrollen oder schlecht geladene Elemente auslösen müssen, können Sie JavaScript ausführen:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Screenshots erstellen
Erfassen Sie einen Screenshot der aktuellen Ansicht mit:
driver.save_screenshot("screenshot.png")
Paginierung handhaben
Um mehrere Seiten zu scrapen, können Sie Links durchlaufen oder mit einem „Weiter“-Button interagieren:
next_button = driver.find_element(By.LINK_TEXT, "Next")
next_button.click()
Daten exportieren
Sie können die Pandas-Bibliothek verwenden, um Ihre gescrapten Daten in einer CSV-Datei zu speichern:
import pandas as pd
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)
Scrollen mit Tasten
Um Tastendrücke wie PAGE_DOWN oder END zu simulieren:
from selenium.webdriver.common.keys import Keys
body = driver.find_element(By.TAG_NAME, "body")
body.send_keys(Keys.END)
Bilder und andere Ressourcen blockieren
Um Scraping zu beschleunigen und den Ressourcenverbrauch zu reduzieren:
driver.execute_cdp_cmd("Network.setBlockedURLs", {"urls": ["*.jpg", "*.png"]})
Wie schneidet Selenium im Vergleich zu anderen Tools ab?
| Tool | JavaScript-Unterstützung | Geschwindigkeit | Idealer Anwendungsfall |
|---|---|---|---|
| Selenium | Vollständig | Mittel | Interaktive/dynamische Seiten |
| BeautifulSoup | Keine | Schnell | Statisches HTML-Scraping |
| Scrapy | Optional (über Selenium) | Sehr schnell | Groß angelegte Scraping-Projekte |
| Puppeteer | Vollständig (nur Node.js) | Mittel | Headless Chromium-basiertes Scraping |
Wann sollten Sie Selenium verwenden?
Wählen Sie Selenium, wenn:
- die Website hauptsächlich auf JavaScript angewiesen ist
- Sie Nutzerinteraktionen simulieren müssen (Klicks, Scrolls und Eingaben)
- Sie an einer kleinen oder mittelgroßen Scraping-Aufgabe arbeiten
Für größere oder schnellere Scraping-Jobs sollten Sie Tools wie Scrapy oder spezialisierte APIs in Betracht ziehen, die sich um Residential Proxys, CAPTCHA und JavaScript kümmern.
Fazit
Selenium ist eine hervorragende Option zum Scrapen dynamischer Websites mit Python. Nach der Einrichtung können Sie Inhalte von komplexen Seiten extrahieren. Obwohl es nicht das schnellste Tool ist, macht seine Fähigkeit, einen echten Browser zu automatisieren, es unglaublich flexibel.