Zum Inhalt springen

Web Scraping mit Python – in 5 Minuten zum fertigen Scraper!

Im Internet gibt es Millionen und Milliarden von Websites und entsprechend auch eine riesige Menge an Informationen. Web Scraping ist das automatisierte Auslesen von Homepages mit dem Ziel die gesuchten Informationen in großer Zahl auslesen zu können. Dieser Beitrag zeigt, wie man mit Python einfache Web Scraping Projekte realisieren kann.

Kurze Einführung: Quellcode einer Website

Damit wir Web Scraping verstehen und anwenden können, müssen wir uns auch mit dem allgemeinen Aufbau und der Funktionsweise einer Website beschäftigen. Wir versuchen in diesem Beitrag nur auf die grundlegendsten Elemente einzugehen, ohne die dieser Text sonst nicht verständlich wäre. Auf w3schools gibt es darüber hinaus noch ausführliche Tutorials zu HTML, CSS und JavaScript, bei denen man weiter in die Tiefe gehen kann.

Der Grundaufbau jeder Website ist mit Hilfe von Hypertext Markup Language (HTML) umgesetzt. Mit dieser wird beispielsweise definiert, welche Textabschnitte Überschriften sind, Bilder eingefügt oder verschiedene Seitenabschnitte definiert. Darüber hinaus werden die Cascading Style Sheets (CSS) genutzt, um die Website zu designen, also die Schriftart und Schriftfarbe zu definieren oder die Abstände zwischen Textelementen festzulegen.

Mit Hilfe von HTML und CSS lässt sich bereits eine Vielzahl von Internetseiten nachbauen. Jedoch nutzen viele noch zusätzlich JavaScript, um den Inhalten Leben einzuhauchen. Ganz allgemein lässt sich sagen, dass alles, was man sieht, wenn man den Refresh Button klickt oder neu auf eine Seite (mit einer anderen URL) kommt mit HTML und CSS programmiert ist. Alles was erst nachträglich „aufpoppt“ oder mit einem Button geöffnet wird, ohne(!) dass eine komplett neue Seite geladen wird ist hingegen mit JavaScript programmiert.

Wenn Du Dich dafür interessierst, wie konkrete Websites aufgebaut sind, kannst Du in den meisten Browsern mit der Tastenkombination Strg & Umschalt & i (MacBook entsprechend Cmd statt Strg), den Quellcode der geöffneten Seite einsehen. Ansonsten geht es auch per Rechtsklick und anschließend auf Untersuchen.

Das Bild zeigt die Konsole in Google Chrome mit dem Quellcode der Seite www.databasecamp.de.
Ausschnitt des Quellcodes von www.databasecamp.de

Python Bibliotheken für Web Scraping

Python stellt verschiedenste Bibliotheken zur Verfügung mit denen man Web Scraping betreiben kann. Grundsätzlich unterscheiden diese sich darin, wie „tief“ sie Informationen von der Seite scrapen können. Beim Web Scraping gibt es verschiedene Schwierigkeitsstufen, um an die gewünschten Daten zu kommen.

Am einfachsten ist es, wenn die Informationen, die man abgreifen will, im Code versteckt sind, der beim initialen Laden der Seite zur Ausführung kommt. Dafür ist die Python Bibliothek Beautiful Soup am Besten geeignet, die wir in diesem Beispiel auch verwenden werden. Für solche Anwendungen kann auch Scrapy genutzt werden. Es geht über Beautiful Soup hinaus, indem es auch bei der anschließenden Datenverarbeitung und Datenspeicherung behilflich ist. Welche der beiden Bibliothek man nutzt ist in den meisten Fällen eher eine Geschmacksfrage.

Die Bibliothek Selenium ist vor allem dann nützlich, wenn erst eine Interaktion mit der Website stattfinden muss, um überhaupt an die gewünschten Informationen zu gelangen. Wenn man sich beispielsweise erst einloggen muss, kann man in Selenium die Website öffnen und auch per Python Code mit ihr interagieren. Dieses Feature bietet Beautiful Soup beispielsweise nicht, da es nur die statischen Elemente der Website scrapen kann.

Was halten Website Betreiber von Scrapern?

Für die Betreiber von Internetseiten sind Web Scraping Algorithmen und andere automatisierte Visits vergleichsweise einfach über das Web-Tracking-Tool erkennbar. Einfach gehaltene Web Scraper lassen sich beispielsweise an sehr kurzen Verweildauern von unter einer Sekunde oder vielen Seitenzugriffen in kurzer Zeit erkennen. Dies lässt darauf schließen, dass es sich dabei nicht um einen menschlichen Zugriff handelt. Die IP-Adressen dieser Besucher lassen sich dann auch mit wenigen Klicks sperren. Automatisierte Website-Besucher müssen aber nicht gezwungenermaßen ein Nachteil für das betroffene Unternehmen oder den Website Betreiber sein.

Die Suchmaschine Google beispielweise scraped relevante Websites in regelmäßigen Abständen und sucht sie nach den sogenannten Keywords und Backlinks ab, um die Suchreihenfolge zu aktualisieren und zu verbessern. Ein anderes Beispiel sind Preisvergleichsseiten, welche mit Hilfe von Web Scrapern regelmäßig Preise für relevante Produkte extrahieren. Ein unbekannter Online-Shop für Notebooks profitiert von der großen Reichweite der Vergleichsseite und hofft dadurch seinen Umsatz steigern zu können. Diese Unternehmen werden Web Scrapern gerne Zugriff auf ihre Seite gewähren. Auf der anderen Seite können auch Wettbewerber diese Methode nutzen, um beispielsweise in großem Stil Preise abzufragen.

Es lässt sich nur schwer sagen, ob Web Scraping im heutigen Web positiv oder negativ ist. Es findet auf jeden Fall häufiger statt, als wir denken. Im Allgemeinen ist es für Websiten Betreiber wichtig, dass die Scraper die technisch einwandfreie Funktionalität der Seite nicht in Gefahr bringen und sie die automatisierten Besucher bei ihrer Analyse ausschließen, um nicht falsche Schlüsse zu ziehen. Ansonsten entscheidet sich im Einzelfall, ob Web Scraping eher schädlich oder nützlich für eine Seite ist.

Beispiel: Homepage Apple Inc.

Für dieses Beispiel werden wir den Store von Apple Inc. scrapen, um herauszufinden, welche Produktkategorien Apple aktuell anbietet. Dieses einfache Beispiel könnte genutzt werden, um die Kategorien über einen längeren Zeitraum zu erfassen und eine automatisierte Benachrichtigung zu bekommen, sobald Apple eine neue Produktkategorie in das Sortiment aufnimmt. Zugegeben, wahrscheinlich werden die wenigsten wirklich eine solche Auswertung benötigen, da man das nach der Apple Keynote oder aus den meisten einschlägigen Nachrichtenportalen erfährt, aber es ist ein anschauliches Beispiel.

Das gezeigte Beispiel wurde in Python 3.7 entwickelt und getestet. Als erstes importieren wir zwei Bibliotheken, urllib nutzen wir für den Umgang mit URLs und für das Öffnen von Websites und Beautifoul Soup für das eigentliche Web Scraping. Wir speichern uns den kompletten Code der Website in der Variable „soup“ ab, dabei hilft uns die Bibliothek Beautiful Soup.

import urllib.request
from bs4 import BeautifulSoup
url = "https://www.apple.com/store"
open_page = urllib.request.urlopen(url)
soup = BeautifulSoup(open_page, "html.parser")
print(soup)

Eine Untersuchung der Seite von Apple Inc. ergibt, dass die Namen der Produktkategorien in Abschnitten mit der Klasse „rf-productnav-card-title“ abgespeichert sind. Diese Klassen werden von den Entwicklern der Website vergeben und müssen bei jedem Projekt aufs Neue gesucht werden. Bevor wir also mit dem Bau eines Web Scrapers beginnen können, müssen wir die Positionen der interessanten Informationen auf der Website ausmachen. In unserem Fall ist das die beschriebene Klasse.

Der Screenshot zeigt die Auflistung der Apple Produktkategorien und den dazugehörigen Quelltext, den wir fürs Web Scraping nutzen.
Apple Produktkategorien und der dazugehörige Quellcode

In unserem Quellcode der Website, die wir in der Variable „soup“ gespeichert haben, müssen wir nun alle Elemente der Klasse “ rf-productnav-card-title“ finden. Dies tun wir mit dem Befehl „findAll“. Diese Elemente können wir mit einer for-Schleife durchlaufen und uns jeweils nur den Text des Elements ausgeben lassen.

for category in soup.findAll(attrs={"class": "rf-productnav-card-title"}):
    category = category.text.strip()
    print(category)
# Output:
Mac
iPhone
iPad
Apple Watch
Apple TV
AirPods
HomePod Mini
iPod touch
Accessories
Apple Gift Card

Mit diesen wenigen Zeilen Code haben wir es also geschafft Informationen von der Apple Website zu scrapen. Nicht alle Anwendungsfälle werden immer so schnell umzusetzen sein wie dieser. Es kann natürlich auch vorkommen, dass die gesuchten Informationen deutlich verschachtelter in der Website sind. Des Weiteren müssen wir Web Scraping Projekte auch immer wieder auf Funktionalität überprüfen, da die gescrapeten Seiten ihren Aufbau ändern können, woraufhin wir unseren Code umbauen müssen. Es ist also nicht sichergestellt, dass unser Algorithmus auch in wenigen Monaten noch funktionieren wird, sondern muss in regelmäßigen Abständen geprüft und überarbeitet werden.

Das solltest Du mitnehmen

  • Web Scraping ist das automatisierte Auslesen von Websiten, um die gewünschten Informationen extrahieren zu können.
  • Python bietet verschiedene Bibliotheken für das Scraping an, die je nach Anwendungsfall auszuwählen sind.
  • Ein gewisses Verständnis für den Aufbau von Websites ist erforderlich, um einen funktionierenden Scraper programmieren zu können.

Andere Beiträge zum Thema Web Scraping

  • Wenn Du wirklich alles zum Thema Web Scraping mit Python wissen willst, kann ich das Buch „Web Scraping with Python“ von O’Reilly nur empfehlen.
Schlagwörter:
Cookie Consent mit Real Cookie Banner