Zum Inhalt

Web Scraping mit Selenium und Python: Der ultimative Leitfaden für 2024

Unter Web Scraping versteht man das automatische Extrahieren von Daten von Websites mithilfe von Softwaretools und Skripts. Selenium ist aufgrund seiner starken Web-Automatisierungsfunktionen eines der beliebtesten Tools für Web-Scraping. In diesem umfassenden Leitfaden befassen wir uns mit Web Scraping mit Selenium und Python.

Überblick über Web Scraping

Bevor wir uns mit Selenium befassen, wollen wir zunächst verstehen, was Web Scraping ist und warum es verwendet wird.

Web Scraping bezieht sich auf Techniken zum automatischen Sammeln von Daten von Websites durch Skripte und Bots anstelle des manuellen Kopierens und Einfügens. Die extrahierten Daten werden dann strukturiert und zur weiteren Analyse in einer Datenbank oder Tabellenkalkulation gespeichert.

Zu den häufigsten Anwendungsfällen von Web Scraping gehören:

  • Preisüberwachung – Verfolgen Sie die Preise für Produkte auf allen E-Commerce-Websites. Helfen Sie dabei, Änderungen und Preisfehler zu erkennen.

  • Marktforschung – Sammeln Sie Daten zu Wettbewerbern, Produkten, Bewertungen usw. aus dem gesamten Internet.

  • Nachrichtenüberwachung – Kratzen Sie Artikel und Nachrichten von Medienseiten. Nützlich für Journalisten und PR-Profis.

  • Forschung – Sozialwissenschaftler nutzen Web Scraping, um Social-Media-Daten für Forschungsstudien zu sammeln.

  • Datenbankaufbau – Erstellen Sie strukturierte Datensätze von Unternehmenskontakten, Produktspezifikationen usw. durch Scraping von Websites.

Web Scraping kann im Vergleich zur manuellen Datenerfassung enorm viel Zeit und Aufwand sparen. Achten Sie jedoch darauf, ethisch zu handeln und die robots.txt-Regeln einer Website zu befolgen.

Warum Selen für Web Scraping verwenden?

Es gibt viele Tools für Web Scraping wie BeautifulSoup, Scrapy, Puppeteer usw. Selenium sticht jedoch hervor, wenn Sie Folgendes benötigen:

  • Scrapen Sie Daten von komplexen, dynamischen Websites, die Inhalte mithilfe von JavaScript laden.

  • Interagieren Sie mit Websites, indem Sie vor dem Scrapen auf Schaltflächen klicken, Formulare ausfüllen usw.

  • Erfassen Sie Daten, die hinter Anmeldeformularen oder Zahlungstoren verborgen sind.

  • Erweitern Sie das Scraping, um große Websites mit Tausenden von Seiten zu verarbeiten.

Selenium automatisiert einen echten Webbrowser wie Chrome oder Firefox, anstatt wie die meisten anderen Web-Scraper nur HTML abzurufen und zu analysieren. Dies ermöglicht das Scrapen dynamischer Daten.

Darüber hinaus verfügt Selenium über eine große Community und unterstützt mehrere Sprachen, darunter Python, Java, C# und JavaScript.

Selenium Web Scraping-Architektur

Bevor wir uns mit dem Code befassen, wollen wir verstehen, wie Selenium Web Scraping durchführt:

Selenium-Architektur für Web Scraping

  • Selenium interagiert mit dem Browser über a WebDriver-API.

  • Der WebDriver startet und steuert einen Browser wie Chrome.

  • Es führt Scraping-Code und Skripte aus, die in Python, Java usw. geschrieben sind.

  • Webseiten werden vom Browser gerendert und verarbeitet.

  • Gekratzte Daten werden gemäß der Logik des Skripts gesammelt und strukturiert.

  • Sie können den Scraper auf Ihren eigenen Maschinen bereitstellen oder eine Cloud-Plattform nutzen.

Diese Architektur ermöglicht es Selenium, selbst komplexe JavaScript-lastige Websites zu scannen, die Tools wie Requests nicht verarbeiten können.

Selenium mit Python einrichten

Bevor wir mit dem Web Scraping beginnen können, müssen wir Selenium in einer Python-Umgebung einrichten.

Installieren Sie Python

Stellen Sie sicher, dass Python 3.6 oder höher auf Ihrem System installiert ist. Sie können die neueste Python-Version herunterladen unter python.org.

Installieren Sie Selen

Führen Sie nach der Installation von Python den folgenden Befehl aus, um Selenium zu installieren:

pip install selenium

Dadurch wird das Python-Selenium-Paket von PyPI installiert.

Installieren Sie WebDrivers

Der Selenium WebDriver ermöglicht die Steuerung von Browsern zum Scraping. Sie müssen den WebDriver für den Browser installieren, den Sie verwenden möchten:

Chrome: Laden Sie die Chrome-Treiber das zu Ihrer Chrome-Version passt.

Firefox: Bekommen das GeckoDriver basierend auf Ihrer Firefox-Version.

Edge: Installiere das MicrosoftWebDriver.

Stellen Sie sicher, dass sich die ausführbare WebDriver-Datei in Ihrem Systempfad befindet, damit Selenium sie erkennen kann.

Das ist es! Wir sind jetzt bereit, mit dem Web-Scraping mit Selenium Python zu beginnen.

Starten des Browsers

Der erste Schritt besteht darin, den Browser über Selenium zu starten.

Importieren Sie Selenium und erstellen Sie ein WebDriver Instanz, indem Sie den Pfad zur ausführbaren Datei des Browsertreibers übergeben:

from selenium import webdriver

driver = webdriver.Chrome(‘/path/to/chromedriver‘) 

Sie können auch eine Headless-Browser-Instanz initialisieren, die kein sichtbares Fenster öffnet:

from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

Als nächstes benutze die get() Methode, um die Browserinstanz zu veranlassen, zu einer URL zu navigieren:

driver.get(‘https://www.example.com‘)

Der Browser öffnet nun die Seite, rendert JavaScript, lädt dynamische Inhalte usw. Jetzt können wir mit dem Scrapen beginnen!

Seitenelemente finden

Um Daten aus Seiten zu extrahieren, müssen wir zunächst die relevanten HTML-Elemente finden. Selen liefert die find_element() Methode hierfür:

search_box = driver.find_element(By.NAME, ‘q‘)

Dadurch wird das Element mit dem Attribut name="q" gefunden. Einige andere gängige Locator-Strategien sind:

  • By.ID – Suche nach Element-ID
  • By.XPATH – Suchen Sie mithilfe einer XPath-Abfrage
  • By.CSS_SELECTOR – Suchen mit CSS-Selektor
  • By.CLASS_NAME – Nach CSS-Klassennamen suchen
  • By.TAG_NAME – Suche nach HTML-Tag-Namen

Sie können auch mehrere Elemente mithilfe von suchen find_elements() was eine Liste zurückgibt.

Text extrahieren

Nachdem Sie ein Element gefunden haben, können Sie dessen Text mit extrahieren text Attribut:

heading = driver.find_element(By.TAG_NAME, ‘h1‘)
print(heading.text)

Dadurch wird das gedruckt <h1> Überschriftentext auf der Seite.

Auf ähnliche Weise können Sie den Wert von Eingabefeldern abrufen:

username = driver.find_element(By.ID, ‘username‘)
print(username.get_attribute(‘value‘))

Um auf Links und Schaltflächen auf einer Seite zu klicken, verwenden Sie die click() Methode für das Element:

link = driver.find_element(By.LINK_TEXT, ‘Next Page‘)
link.click() 

Dies ermöglicht die Interaktion mit paginierten Inhalten, Popups, Modalen usw.

Ausfüllen von Formularen

Mit können Sie Text in Textfelder und andere Eingabeelemente eingeben send_keys():

search_box.send_keys(‘Web Scraping‘)

Dies ermöglicht die Anmeldung bei Websites, das Absenden von Formularen usw. vor dem Scraping.

JavaScript ausführen

Selenium ermöglicht auch die direkte Ausführung von JavaScript auf Seiten mit execute_script():

driver.execute_script(‘alert("Hello World");‘)

Sie können dies verwenden, um von JavaScript in das DOM eingefügte Daten zu extrahieren.

Warten auf das Laden von Elementen

Moderne Websites verwenden umfangreiches AJAX und JavaScript, um Inhalte dynamisch zu laden. Manchmal müssen Sie möglicherweise warten, bis bestimmte Elemente oder Daten geladen sind, bevor Sie mit dem Scrapen beginnen.

Selen hat WebDriverWait und expected_conditions um damit umzugehen:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, ‘someid‘)))

Das Skript wartet nun bis zu 10 Sekunden, bis das Element anklickbar wird.

Es stehen viele erwartete Bedingungen zur Verfügung, z. B. Sichtbarkeit von Elementen, AJAX-Ladevorgänge usw., die Sie für die Verarbeitung dynamischer Seiteninhalte verwenden können.

Durch Seiten scrollen

Bei langen Webseiten müssen Sie möglicherweise nach unten scrollen, um zusätzliche Inhalte über JavaScript zu laden. Selen kann das auch:

# Scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Scroll back to top
driver.execute_script("window.scrollTo(0, 0);")   

Dies ermöglicht das Scrapen langer Webseiten. Der gleiche Scroll-Ansatz funktioniert beim Scrapen von Beiträgen auf Facebook, Twitter und anderen Social-Media-Sites.

Umgang mit Login und Paywalls

Bei einigen Websites ist vor dem Scraping eine Anmeldung erforderlich, oder es gibt möglicherweise Paywalls, die den Zugriff einschränken.

Sie können Selenium verwenden, um Anmeldeinformationen einzugeben, Paywalls zu umgehen und auf eingeschränkte Informationen zum Scraping zuzugreifen:

username = driver.find_element(By.ID, ‘username‘)
password = driver.find_element(By.ID, ‘password‘)

username.send_keys(‘myusername1234‘) 
password.send_keys(‘mypassword5678‘)

login_button = driver.find_element(By.XPATH, ‘//button[text()="Log in"]‘)
login_button.click()

Dies ermöglicht die Anmeldung bei Websites wie Amazon, eBay usw., um geschützte Inhalte zu durchsuchen.

Beispiel für Selenium Web Scraping

Lassen Sie uns alles in einem Selenium-Web-Scraper-Skript zusammenfassen:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Click cookie consent banner
cookie_btn = driver.find_element(By.ID, ‘cookiebanner-accept‘) 
cookie_btn.click()

# Wait for results to load
results = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "results"))
)

# Extract data from results 
headings = results.find_elements(By.TAG_NAME, ‘h3‘)
for heading in headings:
   print(heading.text)

driver.quit()

Dieses Skript:

  • Startet Chrome und geht zu example.com
  • Klickt auf das Cookie-Zustimmungsbanner, um das Scraping zu aktivieren
  • Wartet auf das Laden der Ergebnisse
  • Extrahiert Überschriftentexte und druckt sie aus

Sie können dies durch Scrollen, Anmeldefunktionen usw. erweitern, um leistungsstarke Scraper zu erstellen!

Tipps für effektives Web Scraping mit Selenium

Hier sind einige Tipps, um Ihre Web-Scraping-Produktivität mit Selenium zu verbessern:

  • Verwenden Sie einen Headless-Browser für schnelleres Scraping, ohne dass die Benutzeroberfläche gerendert und angezeigt werden muss

  • Begrenzen Sie unnötige Aktionen wie das Öffnen neuer Tabs, Hover-Interaktionen usw., um schneller zu scrollen

  • Warten Sie auf das Laden der Seite und AJAX Anforderungen, die vor dem Extrahieren von Daten abgeschlossen werden müssen

  • Scrollen Sie schrittweise beim Scrapen langer Seiten, um zu vermeiden, dass alles auf einmal geladen wird

  • Verwenden Sie CSS-Selektoren für Lesbarkeit und Leistung beim Auffinden von Elementen

  • Bei Fehlern erneut versuchen anstatt komplett anzuhalten, um die Abstreifer robuster zu machen

  • Drosselungsanfragen um zu vermeiden, dass Server überlastet werden und blockiert werden

  • Laufen Sie in der Cloud Nutzung von Diensten wie Selenium Grid für Zuverlässigkeit und Skalierbarkeit

Selen-Alternativen für Web Scraping

Hier sind einige andere beliebte Tools für Web Scraping, die Sie sich ansehen können:

  • Schöne Suppe – Führende Python-Bibliothek zum Scraping von HTML und XML

  • Scrapy – Schnelles Web-Crawling-Framework für große Scraping-Projekte

  • Puppenspieler – Headless Chrome Scraping-Bibliothek für JavaScript-Entwickler

  • Dramatiker – Scrapen mit den Browsern Chromium, Firefox und WebKit

  • Apify – Skalierbare Web-Scraping-Plattform mit integrierten Proxys und Headless Chrome

Jedes Tool hat seine eigenen Stärken und Schwächen. Bewerten Sie sie anhand Ihres spezifischen Anwendungsfalls, wenn Sie eine Web-Scraping-Lösung auswählen.

Zusammenfassung

Selenium ist ein vielseitiges Tool zum Erstellen robuster Web-Scraper in Python und anderen Sprachen. Es eröffnet Möglichkeiten wie das Scrapen von JavaScript-Websites, die Handhabung dynamischer Inhalte, den Zugriff auf eingeschränkte Daten usw., die sonst schwierig wären.

Stellen Sie sicher, dass Sie ethische Scraping-Praktiken befolgen und die Einschränkungen von Websites respektieren, wenn Sie Selenium verwenden. Überlasten Sie Server nicht mit aggressivem Scraping.

Mit der Leistungsfähigkeit von Selenium, Python und Sound-Scraping-Strategien können Sie riesige Mengen nützlicher Daten aus dem Web für Business-Intelligence-, Forschungs- und Data-Science-Anwendungen extrahieren.

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *