Web Scraping lernen: Ein Leitfaden für Anfänger

Ist es eine gute Idee, Web Scraping zu lernen? Wenn du dir Hunderte Arbeitsstunden ersparen möchtest, solltest du das tun. Außerdem ist es eine coole Fähigkeit, die man als Programmierer haben kann.

Web Scraping ist der Prozess, Daten von Websites zu extrahieren. Da Daten überall verfügbar sind, kannst du sie abrufen und effektiv verarbeiten, indem du grundlegende und fortgeschrittene Techniken beherrschst.

Wir haben einen Leitfaden für Einsteiger vorbereitet, der alle wichtigen Grundlagen umfasst – vom Verständnis der Website-Struktur über grundlegende Techniken bis hin zu fortgeschrittenen Konzepten des Web Scraping –, damit du zum Profi werden kannst.

Die Struktur von Websites verstehen

Bevor du mit dem Scraping beginnst, musst du verstehen, wie Websites aufgebaut sind.

Zunächst einmal werden Websites mit Code erstellt. Am häufigsten kommen HTML (Hypertext Markup Language), CSS (Cascading Style Sheet) und JavaScript zum Einsatz.

HTML ist am weitesten verbreitet, weil es einfach zu verwenden ist. Es definiert mithilfe von Elementen, die durch Tags dargestellt werden, die Struktur und den Inhalt von Webseiten.

Zum Beispiel:

  • <h1> für Überschriften,
  • <p> für Absätze,

um nur einige zu nennen (und es gibt SEHR VIELE).

So könnte ein HTML-Code aussehen:

<html> <head> <title>Beispielwebsite</title> </head> <body> <h1>Willkommen auf meiner Website!</h1> <p>Dies ist ein Textabsatz.</p> <ul> <li>Element 1</li> <li>Element 2</li> <li>Element 3</li> </ul> </body> </html> </body> </html>

CSS legt schließlich das Styling der HTML-Elemente fest, während JavaScript für das dynamische Verhalten von Websites zuständig ist.

Das Scraping-Tool, das wir verwenden werden, navigiert anhand der Struktur durch die Seite und erkennt die zu extrahierenden Inhalte. Websites mit einer besser organisierten und aussagekräftigeren Struktur lassen sich in der Regel einfacher scrapen. Und als Anfänger weißt du das sicher zu schätzen, oder?

Deine Entwicklungsumgebung einrichten

Okay, jetzt, da du eine Vorstellung von der Struktur von Websites hast, kannst du damit beginnen, deine Entwicklungsumgebung einzurichten.

Zunächst musst du eine Programmiersprache auswählen, denn nicht alle eignen sich für diese Aufgabe. Python ist die beliebteste Wahl für Scraping, da es eine Hochsprache und einfach zu verwenden ist und außerdem über großartige Bibliotheken, Frameworks und integrierte Tools verfügt.

Damit lassen sich bestimmte Aufgaben im Zusammenhang mit Scraping erledigen, zum Beispiel:

  • Requests: erleichtert das Erstellen von HTTP-Anfragen an die Zielwebsite.
  • BeautifulSoup: Diese Bibliothek wird zum Parsen von HTML- und XML-Dokumenten verwendet. Aber warte mal, was bedeutet Parsen? Es ist der Prozess, strukturierte Daten zu analysieren und zu interpretieren.
  • Selenium: zur Automatisierung von Webbrowsern, damit sie Aufgaben ausführen, die menschliche Interaktionen simulieren.
  • Scrapy: Dieses umfassende Framework kann für verschiedene Aufgaben wie Web-Crawling (das Durchsuchen von URLs zum Extrahieren von Daten), Data Mining und automatisierte Tests verwendet werden.

Wie fängst du an?

  1. Umgebung einrichten: Lade die neueste Version von Python herunter und installiere sie. So einfach ist das.
  2. Richte eine virtuelle Umgebung ein: Erstelle eine virtuelle Umgebung, damit die Abhängigkeiten deines Projekts isoliert bleiben. Öffne ein Terminal und führe die folgenden Befehle aus:
python -m venv myenv source myenv/bin/activate # For Unix/Linux myenv\Scripts\activate.bat # For Windows

3. Installiere die Bibliotheken und Tools: Ich empfehle dir, zu Beginn Requests, Selenium, BeautifulSoup und Scrapy zu installieren. Du kannst sie mit dem Befehl „pip install“ installieren. Öffne einfach ein Terminal und führe Folgendes aus:

pip install requests beautifulsoup4 scrapy selenium

Web Scraping 101: Ethik und Best Practices

Moment mal. Bevor wir uns den technischen Aspekten widmen, wollen wir die ethischen Auswirkungen und Best Practices des Web Scraping betrachten.

Jeder, der Scraping betreibt, kennt das bis zu einem gewissen Grad, aber Anfänger müssen die folgenden Richtlinien verstehen, damit sie sich innerhalb der Grenzen bewegen:

  • Beachte die Robots.txt: Die erste Regel beim Scraping lautet, dass du die Robots.txt beachten musst. Das ist eine Textdatei, die jede Website hat und in der grundsätzlich festgelegt ist, was du scrapen darfst und was nicht.
  • Beachte die Nutzungsbedingungen der Website: Prüfe die Nutzungsbedingungen der Website, um festzustellen, ob Web Scraping erlaubt ist.
  • Begrenze die Häufigkeit des Scrapings und die Belastung der Server: Vermeide es, in kurzer Zeit zu viele Anfragen zu stellen. Verhindere außerdem eine Überlastung des Servers, indem du Verzögerungen zwischen den Anfragen einbaust.
  • Verwende APIs (falls verfügbar): Prüfe vor dem Scraping, ob die Website eine API für den Datenzugriff bereitstellt. Glaub mir, ich habe schon an einem Scraper gearbeitet und erst später herausgefunden, dass eine API verfügbar war – ich hatte es einfach nicht überprüft. Eine API zu verwenden ist viel einfacher (glaub mir), da sie strukturierte Daten bereitstellt.
  • Rechtliche Aspekte: Prüfe die Gesetze, um sicherzustellen, dass du keine Rechte an geistigem Eigentum verletzt und keine Vorschriften missachtest. Wenn du dir nicht sicher bist, solltest du dich zuerst von einem Anwalt beraten lassen.

Erste Schritte mit Web Scraping: Grundlegende Techniken

Okay, genug Theorie und Konzepte, jetzt geht es an die Arbeit. Als Erstes lernst du, wie man HTTP-Anfragen sendet.

HTTP-Anfragen (GET, POST) mit der Requests-Bibliothek von Python senden

Hier verwenden wir die Requests-Bibliothek in Python. Sehen wir uns ein Beispiel an:

import requests url = 'https://example.com' response = requests.get(url) html_content = response.text

Hier gibst du die URL der Seite an, die du scrapen möchtest. Mit requests.get () senden wir eine GET-Anfrage, und der HTML-Inhalt der Seite wird in der Variablen html_content gespeichert.

HTML mit BeautifulSoup parsen

Sobald Sie den HTML-Inhalt haben, können Sie ihn mit der Bibliothek BeautifulSoup parsen, um bestimmte Daten zu extrahieren. Hier ist ein Beispiel:

from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') title = soup.find('h1').text paragraphs = soup.find_all('p')

In diesem Code erstellen wir ein BeautifulSoup-Objekt, indem wir den HTML-Inhalt übergeben und den Parser angeben (in diesem Fall „html.parser“). Anschließend können wir Methoden wie find() und find_all() verwenden, um bestimmte Elemente anhand ihrer Tags oder Attribute zu finden.

Daten mithilfe von CSS-Selektoren und Methoden wie find() und find_all() extrahieren

CSS-Selektoren bieten eine leistungsstarke Möglichkeit, Elemente auf einer Webseite zu finden. Mit BeautifulSoup können Sie CSS-Selektoren zum Extrahieren von Daten verwenden.

Hier ist ein Beispiel:

links = soup.select('a.external-link') for link in links: href = link['href'] text = link.text print(f"Link: {href}, Text: {text}")

In diesem Code verwenden wir die Methode select(), um alle Tags mit der Klasse „external-link“ zu finden. Anschließend können wir die ausgewählten Elemente durchlaufen und die gewünschten Attribute oder Texte extrahieren.

Ausgelesene Daten in Dateien speichern

Nachdem Sie die gewünschten Daten extrahiert haben, können Sie sie zur weiteren Analyse oder Verarbeitung in einer Datei speichern. Hier ist ein Beispiel dafür, wie Daten in einer CSV-Datei gespeichert werden:

import csv data = [ ['Name', 'Age', 'City'], ['John', '25', 'New York'], ['Alice', '30', 'London'], ] with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerows(data)

In diesem Code definieren wir eine Liste von Datenzeilen, öffnen eine Datei namens „output.csv“ im Schreibmodus, erstellen ein CSV-Writer-Objekt und schreiben die Datenzeilen in die Datei.

Dies sind die grundlegenden Techniken, die Sie üben sollten. Im weiteren Verlauf werden Sie feststellen, dass das Scraping in manchen Fällen schwierig wird, zum Beispiel bei dynamischen Websites oder Paginierung.

Keine Sorge, (fast) jede Website lässt sich auslesen, wenn Sie die richtigen Techniken kennen und die passenden Tools verwenden.

Paginierung und mehrere Seiten verarbeiten

Der Begriff „Paginierung“ bezeichnet Websites, deren Inhalte auf mehrere Seiten verteilt sind. Wenn Sie Daten von allen Seiten auslesen möchten, müssen Sie das Paginierungsmuster erkennen. Auf diese Weise können Sie Ihre Scraping-Schleife anpassen und die Ergebnisse abrufen.

Sehen Sie sich die folgenden Techniken an:

  1. Paginierungsmuster in URLs erkennen: Achten Sie auf Muster in der URL-Struktur, die auf die Seitennummer hinweisen. URLs wie https://example.com/page/1, https://example.com/page/2 usw. folgen beispielsweise einem eindeutigen Paginierungsmuster.
  2. Die Scraping-Schleife anpassen: Passen Sie Ihre Scraping-Schleife so an, dass sie den Bereich der Seitennummern durchläuft. Zum Beispiel:
for page in range(1, 11): url = f"https://example.com/page/{page}" # Scrape data from each page

In diesem Code durchlaufen wir die Seitennummern von 1 bis 10 und erstellen die URL für jede Seite dynamisch.

3. Das Vorhandensein einer Schaltfläche „Weiter“ erkennen: Manche Websites verwenden statt expliziter Seitennummern eine Schaltfläche „Weiter“. In solchen Fällen können Sie prüfen, ob die Schaltfläche „Weiter“ vorhanden ist, und das Scraping fortsetzen, bis sie nicht mehr angezeigt wird.

Umgang mit dynamischen Websites und JavaScript-Rendering

Als Scraper wirst du sicher auf Websites stoßen, die sehr interaktiv und komplex sind, um die Benutzererfahrung zu verbessern. Diese Arten von Websites sind stark auf JavaScript angewiesen und werden allgemein als Websites mit dynamischen Inhalten bezeichnet.

Aber worum geht es dabei? Das Problem ist, dass der Quellcode auf diesen Websites die gewünschten Daten möglicherweise nicht enthält und sie daher eine Herausforderung für das Scraping darstellen.

In solchen Fällen musst du Tools wie Selenium verwenden.

Selenium ist ein leistungsstarkes Tool zur Automatisierung von Webbrowsern. Damit kannst du mit Webseiten interagieren, Formulare ausfüllen, auf Schaltflächen klicken und Daten aus dynamisch gerenderten Inhalten extrahieren.

Selenium einrichten

Wenn du Selenium bereits installiert hast, musst du als Nächstes einen Webtreiber für deinen bevorzugten Browser installieren. Zum Beispiel ChromeDriver für Google Chrome.

Hier ein Beispiel für die Verwendung:

from selenium import webdriver driver = webdriver.Chrome() # Assumes ChromeDriver is installed and in PATH driver.get('https://example.com') # Perform actions and extract data title = driver.find_element_by_tag_name('h1').text driver.quit()

In diesem Code erstellen wir eine Instanz des Chrome-Webtreibers, rufen mit driver.get() eine bestimmte URL auf und führen anschließend Aktionen aus und extrahieren Daten mithilfe von Selenium-Methoden wie find_element_by_tag_name().

Warten, bis Elemente geladen sind

Auf dynamischen Websites werden Inhalte oft nicht gleichzeitig geladen. Daher sind manche Elemente beim Laden der Seite möglicherweise nicht sofort verfügbar. Mit den expliziten und impliziten Wartezeiten von Selenium kannst du damit umgehen.

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10)<br>element = wait.until(EC.presence_of_element_located((By.ID, 'my-element-id')))

In diesem Code erstellen wir ein WebDriverWait-Objekt mit einer Zeitüberschreitung von 10 Sekunden. Anschließend verwenden wir die Methode until(), um auf das Vorhandensein eines Elements mit einer bestimmten ID zu warten.

Alternativen zu Selenium

Auch wenn viele Nutzer glauben, dass Selenium die beste Lösung für dynamische Websites ist, solltest du Alternativen ausprobieren, um herauszufinden, was am besten zu dir passt.

Scrapy-Splash könnte eine Option sein. Es integriert einen Headless-Browser in das Scrapy-Framework. Dank der nicht blockierenden Netzwerkinfrastruktur von Scrapy und der fortschrittlichen Funktionen von Splash zum schnellen Rendern dynamischer Webseiten lassen sich Daten damit effizienter extrahieren.

Requests-html ist eine weitere Alternative, da es die Funktionalität der Requests-Bibliothek erweitert und Unterstützung für JavaScript-Rendering sowie die Interaktion mit Webseiten hinzufügt.

Fortgeschrittene Web-Scraping-Techniken

Wenn du Fortschritte machst, wirst du feststellen, dass du einige Scraping-Szenarien bewältigst, aber auch auf komplexe Fälle stößt, die fortgeschrittenere Techniken erfordern.

Authentifizierung und Cookies verwalten

Einige Websites erfordern eine Authentifizierung oder verwenden Cookies, um Benutzersitzungen zu verwalten. Du kannst die Authentifizierung handhaben, indem du Anmeldedaten mit deinen Anfragen sendest, und Cookies mithilfe von Bibliotheken wie requests oder http.cookiejar verwalten.

Erkennung und Sperren vermeiden

Websites können Maßnahmen ergreifen, um Web-Scraping-Aktivitäten zu erkennen und zu blockieren. Um eine Erkennung zu vermeiden, kannst du Techniken wie das Rotieren von User-Agents, die Verwendung von Proxys und zufällige Verzögerungen zwischen Anfragen einsetzen.

Daten in Datenbanken speichern

Statt gescrapte Daten in Dateien zu speichern, kannst du sie für eine effizientere Speicherung und Abfrage in Datenbanken ablegen. Beliebte Optionen sind SQL-Datenbanken wie MySQL und PostgreSQL sowie NoSQL-Datenbanken wie MongoDB.

APIs scrapen und JSON-Daten verarbeiten

Hey! Du hast die API gefunden. Aber sie liegt im JSON-Format vor. Was kannst du tun? Du kannst Bibliotheken wie requests verwenden, um API-Anfragen zu stellen und die JSON-Antworten mit dem json-Modul in Python zu parsen.

Paralleles und asynchrones Scraping

Um den Scraping-Prozess zu beschleunigen, kannst du parallele Verarbeitung und asynchrone Programmiertechniken nutzen. Bibliotheken wie multiprocessing, threading und asyncio in Python können dir dabei helfen.

Alles zusammenführen: Web-Scraping-Projekte aus der Praxis

Als Anfänger hatte ich zu Beginn meiner Scraping-Ausbildung das Gefühl, genau zu wissen, was ich tun musste – bis ich es tatsächlich tun sollte. Es bringt nichts, einfach nur zu lesen: Du musst deine Fähigkeiten durch Übung auf die Probe stellen.

Und was wäre dafür besser geeignet als Projekte aus der Praxis?

Schauen wir uns einige Beispiele mit ihren einzelnen Schritten an:

Beispiel 1: Nachrichtenartikel scrapen und Stimmungsanalysen durchführen

  1. Den Scraping-Prozess planen:
    • Die zu scrapende Nachrichtenseite bestimmen
    • Die Struktur der Artikel festlegen (Titel, Inhalt, Datum usw.)
    • Das Format für die Datenspeicherung planen (z. B. CSV, Datenbank)
  2. Den Scraper implementieren:
    • Mit requests den HTML-Inhalt der Nachrichtenseite abrufen
    • Das HTML mit BeautifulSoup parsen, um Artikelinformationen zu extrahieren
    • Die Paginierung handhaben und mehrere Seiten durchlaufen
    • Die gescrapten Daten im ausgewählten Format speichern
  3. Die gescrapten Daten analysieren und visualisieren:
    • Mit Bibliotheken wie NLTK oder TextBlob eine Stimmungsanalyse der Artikelinhalte durchführen
    • Die Stimmungswerte mit Bibliotheken wie Matplotlib oder Plotly visualisieren
    • Trends und Muster in der Nachrichtenstimmung im Zeitverlauf erkennen

Beispiel 2: Ein Tool zur Preisüberwachung entwickeln

  1. Produktinformationen von E-Commerce-Websites scrapen:
    • Die zu scrapenden E-Commerce-Websites bestimmen
    • Die Struktur der Produktinformationen festlegen (Name, Preis, Verfügbarkeit usw.)
    • Web-Scraping-Techniken verwenden, um Produktdaten von mehreren Websites zu extrahieren
  2. Benachrichtigungen und Warnmeldungen einrichten:
    • Preisgrenzen oder Verfügbarkeitskriterien für jedes Produkt festlegen
    • Einen Mechanismus implementieren, der gescrapte Preise mit den festgelegten Grenzwerten vergleicht
    • E-Mail- oder SMS-Benachrichtigungen einrichten, um Nutzer zu informieren, wenn Preise sinken oder Produkte verfügbar werden
  3. Den Scraper in der Cloud bereitstellen:
    • Eine Cloud-Plattform auswählen (z. B. AWS, Google Cloud, Heroku)
    • Die erforderliche Umgebung und Abhängigkeiten konfigurieren
    • Den Scraper so planen, dass er in regelmäßigen Abständen ausgeführt wird
    • Die gescrapten Daten in einer cloudbasierten Datenbank speichern, damit sie leicht zugänglich und überwachbar sind

Web-Scraping-Frameworks und -Tools

Ich weiß, dass die Begriffe „Framework“ und „Bibliothek“ oft synonym verwendet werden, aber sie bezeichnen unterschiedliche Dinge und werden für verschiedene Zwecke eingesetzt.

Mit Bibliotheken wie Request oder BeautifulSoup kannst du Web-Scraper von Grund auf selbst entwickeln. Frameworks vereinfachen den Prozess hingegen, da sie eine Sammlung von Tools und Bibliotheken bereitstellen.

Man kann es sich so vorstellen: Bibliotheken sind wie Autos mit Schaltgetriebe – sie geben dir die volle Kontrolle, erfordern beim Fahren aber mehr Aufwand und Geschick. Frameworks hingegen sind wie Autos mit Automatikgetriebe: Sie bieten ein reibungsloseres und effizienteres Erlebnis, indem sie viele mühsame Aspekte des Scrapings vereinfachen.

Zu den beliebtesten Optionen gehören:

Scrapy

Scrapy ist ein Framework für Python mit einem vollständigen Ökosystem zur Entwicklung skalierbarer und effizienter Web-Scraper. Zu den wichtigsten Funktionen gehören:

  • Von Grund auf auf Geschwindigkeit ausgelegt.
  • Kein zusätzlicher Code nötig, um CSV-, JSON- und andere Dateien zu erzeugen.
  • Unterstützung für XPath und CSS-Selektoren.
  • Umfangreiches Erweiterungsökosystem, zum Beispiel mit Unterstützung für Middlewares.
  • Integration mit Item-Pipelines für die Datenverarbeitung und -speicherung

PySpider

PySpider ist ebenfalls ein Framework für Python, aber im Gegensatz zu Scrapy ist es mit JavaScript kompatibel – seine größte Stärke. Es eignet sich außerdem hervorragend für Einsteiger. Zu den wichtigsten Funktionen gehören:

  • Unterstützung für das Rendern von JavaScript mit PhantomJS oder Puppeteer
  • Integrierte Aufgabenwarteschlange und Scheduler
  • Integration mit Datenbanken und Nachrichtenwarteschlangen
  • Unterstützung für gleichzeitige Verarbeitung

Web-Scraping-Tools und -Dienste

Zusätzlich zu Frameworks gibt es einige Tools und Dienste, die das Scraping erleichtern. Das Beste daran: Sie erfordern nur minimale Programmierkenntnisse. Einige Optionen sind:

  • Octoparse: Ein cloudbasiertes Web-Scraping-Tool mit einer Point-and-Click-Oberfläche zum Extrahieren von Daten aus Websites.
  • ParseHub: Eine Desktop-Anwendung, mit der du Web-Scraper erstellen kannst, indem du Elemente auf einer Webseite visuell auswählst.
  • Import.io: Eine webbasierte Plattform mit Tools zum Extrahieren von Daten aus Websites und APIs.

Die Grundlagen des Web-Scrapings zusammengefasst

In diesem Leitfaden haben wir die Grundlagen des Web-Scrapings umfassend behandelt, darunter den Aufbau von Websites, ethische Überlegungen, grundlegende und fortgeschrittene Techniken sowie zusätzliche Tools und Frameworks.

Du kannst jetzt loslegen, solltest dein Wissen aber durch weitere Ressourcen vertiefen, zum Beispiel durch die offizielle Dokumentation von Bibliotheken und Frameworks sowie Web-Scraping-Tutorials.

Versuche außerdem, dir in Scraping-Communitys und -Foren Rat von erfahrenen Scrapern zu holen. Zieh dich nicht zurück – wir brauchen einander.

Wir alle waren einmal Anfänger. Sei also nachsichtig mit dir selbst, fang klein an und übe regelmäßig. Mit genügend Übung und Ausdauer wirst du sehen, wie du im Laufe der Zeit immer komplexere Projekte bewältigen kannst.