Ist es eine gute Idee, Web Scraping zu lernen? Wenn Sie Hunderte von Arbeitsstunden sparen möchten, sollten Sie das tun. Außerdem ist es eine tolle Fähigkeit für Programmierer.
Beim Web Scraping werden Daten aus Websites extrahiert. Da Daten überall verfügbar sind, können Sie sie abrufen und effektiv verarbeiten, indem Sie grundlegende und fortgeschrittene Techniken beherrschen.
Wir haben einen Leitfaden für Anfänger erstellt, der alle wichtigen Informationen enthält, vom Verständnis der Website-Struktur über die Vermittlung grundlegender Techniken bis hin zu fortgeschrittenen Konzepten des Web Scraping, damit Sie zum Profi werden.
Website-Struktur verstehen
Bevor Sie sich ins Scraping stürzen, müssen Sie verstehen, wie Websites strukturiert sind.
Erstens werden Websites mithilfe von Code erstellt. Am gebräuchlichsten sind HTML (Hypertext Markup Language), CSS (Cascading Style Sheet) und JavaScript.
HTML ist am beliebtesten, da es einfach zu verwenden ist. Es definiert die Struktur und den Inhalt von Webseiten mithilfe von Elementen, die durch Tags dargestellt werden.
Zum Beispiel,
- <h1> für Überschriften,
- <p> für Absätze,
um nur einige zu nennen (und es gibt VIELE).
Hier ist ein Beispiel, wie ein HTML-Code aussehen würde:
<html>
<head>
<title>Example Website</title>
</head>
<body>
<h1>Welcome to my website!</h1>
<p>This is a paragraph of text.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</body>
</html>
</body>
</html>
Schließlich definiert CSS das Styling der HTML-Elemente, während JavaScript für das dynamische Verhalten von Websites zuständig ist.
Das von uns verwendete Scraping-Tool navigiert die Seite anhand ihrer Struktur und identifiziert den zu extrahierenden Inhalt. Websites mit einer besser organisierten und beschreibenden Struktur lassen sich in der Regel leichter scrapen. Und als Anfänger wissen Sie das sicher zu schätzen, nicht wahr?
Einrichten Ihrer Entwicklungsumgebung
Ok, da Sie jetzt eine Vorstellung von der Website-Struktur haben, können Sie mit der Einrichtung Ihrer Entwicklungsumgebung beginnen.
Zuerst müssen Sie eine Programmiersprache auswählen, da nicht alle für diese Aufgabe geeignet sind. Python ist die beliebteste Wahl für das Scraping, da es hochentwickelt und benutzerfreundlich ist und außerdem über hervorragende Bibliotheken, Frameworks und integrierte Tools verfügt.
Diese ermöglichen die Lösung spezifischer Aufgaben im Zusammenhang mit dem Scraping, beispielsweise:
- Requests: erleichtert die Generierung von HTTP-Anfragen an die Zielwebsite.
- BeautifulSoup: Diese Bibliothek wird zum Parsen von HTML- und XML-Dokumenten verwendet. Aber Moment mal, was ist Parsen? Es ist der Prozess des Analysierens und Interpretierens strukturierter Daten.
- Selenium: Webbrowser automatisieren, um Aufgaben auszuführen, die menschliche Interaktion simulieren.
- Scrapy: Dieses umfassende Framework kann für verschiedene Aufgaben verwendet werden, wie z. B. Web-Crawling (Durchsuchen von URLs zum Extrahieren von Daten), Data Mining und automatisiertes Testen.
Wie fange ich an?
- Umgebungseinrichtung: Laden Sie die neueste Version von Python herunter und installieren Sie sie. So einfach ist das.
- Richten Sie eine virtuelle Umgebung ein: Erstellen Sie eine virtuelle Umgebung, um die Abhängigkeiten Ihres Projekts isoliert zu halten. Öffnen Sie ein Terminal und führen Sie die folgenden Befehle aus:
python -m venv myenv
source myenv/bin/activate # For Unix/Linux
myenv\Scripts\activate.bat # For Windows
3. Installieren Sie die Bibliotheken und Tools: Ich empfehle Ihnen, Requests, Selenium, BeautifulSoup und Scrapy zu installieren. Sie können sie mit dem „pip install”-Befehl, öffnen Sie einfach ein Terminal und führen Sie Folgendes aus:
pip install requests beautifulsoup4 scrapy selenium
Web Scraping 101: Ethik und bewährte Vorgehensweisen
Moment. Bevor wir uns mit den technischen Aspekten befassen, wollen wir uns zunächst die ethischen Auswirkungen und Best Practices des Web Scraping ansehen.
Das ist jedem Scraper mehr oder weniger klar, aber Neulinge müssen die folgenden Richtlinien verstehen, damit sie innerhalb der Grenzen bleiben:
- Beachten Sie Robots.txt: Die erste Regel beim Scraping ist, dass Sie Robots.txt beachten müssen. Das ist eine Textdatei, die auf jeder Site vorhanden ist und die grundsätzlich jedem mitteilt, was Sie scrapen dürfen und was nicht.
- Beachten Sie die Nutzungsbedingungen der Site: Überprüfen Sie die Nutzungsbedingungen der Site, um zu sehen, ob Web Scraping zulässig ist.
- Begrenzen Sie die Scraping-Häufigkeit und die Auswirkung auf die Server: Vermeiden Sie zu viele Anfragen in einem kurzen Zeitraum. Vermeiden Sie außerdem eine Überlastung des Servers, indem Sie Verzögerungen zwischen den Anfragen implementieren.
- Verwenden Sie APIs (falls verfügbar): Überprüfen Sie vor dem Scraping, ob die Site eine API für den Datenzugriff bereitstellt. Ich kann Ihnen nur sagen, wie oft ich an einem Scraper gearbeitet habe, nur um dann festzustellen, dass die API verfügbar war, aber ich hatte mir nicht die Mühe gemacht, nachzuschauen. Die Verwendung einer API ist viel einfacher (glauben Sie mir), da sie strukturierte Daten bereitstellt.
- Rechtliche Hinweise: Überprüfen Sie die Gesetze, um sicherzustellen, dass Sie keine geistigen Eigentumsrechte verletzen oder gegen Regeln verstoßen. Wenn Sie sich nicht sicher sind, sollten Sie zuerst einen Anwalt konsultieren.
Erste Schritte mit Web Scraping: Grundlegende Techniken
Ok, wir sind mit Theorie und Konzepten fertig, machen wir uns an die Arbeit. Als Erstes lernen Sie, wie Sie HTTP-Anfragen senden.
Senden von HTTP-Anfragen (GET, POST) mit der Requests-Bibliothek von Python
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 geben Sie die URL der Seite an, die Sie scrapen möchten. Mit requests.get () wir senden eine GET-Anfrage und der HTML-Inhalt der Seite wird in der Variable html_content gespeichert.
HTML mit BeautifulSoup parsen
Sobald Sie den HTML-Inhalt haben, können Sie ihn mithilfe der BeautifulSoup-Bibliothek analysieren, 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'). Wir können dann Methoden verwenden wie find() und find_all() um bestimmte Elemente anhand ihrer Tags oder Attribute zu lokalisieren.
Extrahieren von Daten mit CSS-Selektoren und Methoden wie find() und find_all()
CSS-Selektoren bieten eine leistungsstarke Möglichkeit, Elemente auf einer Webseite zu lokalisieren. BeautifulSoup ermöglicht Ihnen die Verwendung von CSS-Selektoren zum Extrahieren von Daten.
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 select() Methode, um alle Tags mit der Klasse „ zu findenexternal-link„. Wir können dann über die ausgewählten Elemente iterieren und die gewünschten Attribute oder Texte extrahieren.
Speichern von Scraped-Daten in Dateien
Nachdem Sie die gewünschten Daten extrahiert haben, können Sie diese zur weiteren Analyse oder Verarbeitung in einer Datei speichern. Hier ist ein Beispiel für das Speichern von Daten in einer CSV-Datei:
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 mit dem Namen „output.csv“Erstellen Sie im Schreibmodus ein CSV-Writer-Objekt und schreiben Sie die Datenzeilen in die Datei.
Dies sind die grundlegenden Techniken, die Sie üben müssen. Wenn Sie weitermachen, werden Sie feststellen, dass es einige Fälle gibt, in denen Scraping schwierig wird, z. B. bei dynamischen Websites oder bei der Paginierung.
Keine Sorge, (fast) jede Site kann gescraped werden, wenn Sie die richtigen Techniken kennen und über die richtigen Tools verfügen.
Umgang mit Seitennummerierung und mehreren Seiten
Der Begriff „Pagination„“ bezieht sich auf Websites, die ihren Inhalt auf mehrere Seiten verteilen. Wenn Sie Daten von allen Seiten scrapen möchten, müssen Sie das Paginierungsmuster identifizieren. Auf diese Weise können Sie Ihre Scraping-Schleife ändern und Ergebnisse erzielen.
Überprüfen Sie die folgenden Techniken:
- Paginierungsmuster in URLs identifizieren: Suchen Sie in der URL-Struktur nach Mustern, die die Seitenzahl angeben. Beispielsweise URLs wie https://example.com/page/1, https://example.com/page/2usw. folgen einem klaren Paginierungsmuster.
- Ändern der Scraping-Schleife: Passen Sie Ihre Scraping-Schleife so an, dass sie über den Bereich der Seitenzahlen iteriert. Beispiel:
for page in range(1, 11):
url = f"https://example.com/page/{page}"
# Scrape data from each page
In diesem Code iterieren wir über die Seitenzahlen von 1 bis 10 und konstruieren die URL für jede Seite dynamisch.
3. Erkennen des Vorhandenseins eines „Next”-Button: Einige Websites verwenden einen „Next”-Schaltfläche anstelle expliziter Seitenzahlen. In solchen Fällen können Sie nach dem Vorhandensein der Schaltfläche „Next“-Taste und schaben Sie weiter, bis es verschwindet.
Umgang mit dynamischen Websites und JavaScript-Rendering
Als Scraper werden Sie sicherlich auf Websites stoßen, die sehr interaktiv und komplex sind, um das Benutzererlebnis zu verbessern. Diese Arten von Websites basieren stark auf JavaScript und werden im Allgemeinen als Websites mit dynamischem Inhalt bezeichnet.
Aber warum die ganze Aufregung darum? Das Problem ist, dass der Quellcode dieser Sites möglicherweise nicht die gewünschten Daten enthält und diese beim Scraping eine Herausforderung darstellen.
In diesem Fall müssen Sie Tools wie Selenium verwenden.
Selenium ist ein leistungsstarkes Tool zur Automatisierung von Webbrowsern. Es ermöglicht Ihnen die Interaktion mit Webseiten, das Ausfüllen von Formularen, Klicken auf Schaltflächen und Extrahieren von Daten aus dynamisch gerenderten Inhalten.
Einrichten von Selenium
Wenn Sie Selenium bereits installiert haben, müssen Sie als Nächstes einen Webtreiber für Ihren bevorzugten Browser installieren. Zum Beispiel ChromeDriver für Google Chrome.
Hier ist ein Anwendungsbeispiel:
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 und navigieren zu einer bestimmten URL mit driver.get()und führen Sie dann Aktionen aus und extrahieren Sie Daten mit Selenium-Methoden wie find_element_by_tag_name().
Warten auf das Laden von Elementen
Auf dynamischen Websites werden die Inhalte häufig nicht gleichzeitig geladen. Daher sind einige Elemente möglicherweise nicht sofort verfügbar, wenn die Seite geladen wird. Sie können dies mithilfe der expliziten und impliziten Wartezeiten von Selenium 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 einem Timeout von 10 Sekunden. Anschließend verwenden wir die until()-Methode, um auf das Vorhandensein eines Elements mit einer bestimmten ID zu warten.
Alternativen zu Selenium
Obwohl viele Benutzer der Meinung sind, dass Selenium die beste Lösung für dynamische Sites ist, sollten Sie sich nach Alternativen umsehen, um herauszufinden, was für Sie am besten geeignet ist.
Scrapy-Splash könnte eine Option sein. Dabei handelt es sich um die Integration eines Headless-Browsers mit dem Scrapy-Framework. Dank Scrapys nicht blockierender Netzwerkinfrastruktur und Splashs erweiterten Funktionen zum schnellen Rendern dynamischer Webseiten können Daten effizienter extrahiert werden.
Requests-html ist eine weitere Alternative, da es die Funktionalität der Requests-Bibliothek um Unterstützung für JavaScript-Rendering und Interaktion mit Webseiten erweitert.
Fortgeschrittene Web Scraping Techniken
Mit zunehmendem Fortschritt werden Sie feststellen, dass Sie mit einigen Scraping-Szenarien zurechtkommen, aber auch mit komplexen Szenarien konfrontiert werden, die fortgeschrittenere Techniken erfordern.
Umgang mit Authentifizierung und Cookies
Einige Websites erfordern eine Authentifizierung oder verwenden Cookies, um Benutzersitzungen zu verwalten. Sie können die Authentifizierung handhaben, indem Sie Anmeldeinformationen mit Ihren Anfragen senden und Cookies mithilfe von Bibliotheken wie verwalten. requests oder http.cookiejar.
Vermeidung von Entdeckung und Sperren
Websites können Maßnahmen ergreifen, um Web Scraping-Aktivitäten zu erkennen und zu blockieren. Um eine Erkennung zu vermeiden, können Sie Techniken wie rotierende Benutzeragenten, die Verwendung von Proxys und die Einführung zufälliger Verzögerungen zwischen Anfragen verwenden.
Speichern von Daten in Datenbanken
Anstatt Scraped-Daten in Dateien zu speichern, können Sie sie in Datenbanken speichern, um sie effizienter zu speichern und abzurufen. Zu den beliebtesten Optionen gehören SQL-Datenbanken wie MySQL und PostgreSQL sowie NoSQL-Datenbanken wie MongoDB.
Scraping von APIs und Umgang mit JSON-Daten
Hey! Du hast die API gefunden. Aber sie ist im JSON-Format. Was kannst du tun? Du kannst Bibliotheken verwenden wie requests um API-Anfragen zu stellen und die JSON-Antworten mit dem JSON-Modul in Python zu analysieren.
Paralleles und asynchrones Scraping
Um den Scraping-Prozess zu beschleunigen, können Sie parallele Verarbeitungs- und asynchrone Programmiertechniken nutzen. Bibliotheken wie Multiprocessing, Threading und Asyncio in Python können Ihnen dabei helfen.
Alles zusammenfügen: Web Scraping-Projekte aus der Praxis
Als ich als Neuling mit meinem Scraping-Training begann, hatte ich das Gefühl, genau zu wissen, was ich tun musste, bis ich es tun musste. Es hat keinen Sinn, nur zu lesen, Sie müssen Ihre Fähigkeiten durch Übung auf die Probe stellen.
Und wie ließe sich dies besser erreichen, als durch die Arbeit an realen Projekten?
Schauen wir uns einige Beispiele mit ihrem schrittweisen Prozess an:
Beispiel 1: Scraping von Nachrichtenartikeln und Stimmungsanalyse
- Planung des Schabvorgangs:
- Identifizieren der zu scrapenden Nachrichten-Website
- Legen Sie die Struktur der Artikel fest (Titel, Inhalt, Datum usw.).
- Planen Sie das Datenspeicherformat (z. B. CSV, Datenbank)
- Implementierung des Scrapers:
- Verwenden Sie Anfragen, um den HTML-Inhalt der Nachrichten-Website abzurufen
- Analysieren Sie das HTML mit BeautifulSoup, um Artikelinformationen zu extrahieren
- Seitennummerierung verwalten und durch mehrere Seiten navigieren
- Speichern Sie die Scraped-Daten im gewählten Format
- Analysieren und Visualisieren der Scraped-Daten:
- Führen Sie mithilfe von Bibliotheken wie NLTK oder TextBlob eine Stimmungsanalyse des Artikelinhalts durch
- Visualisieren Sie die Stimmungswerte mit Bibliotheken wie Matplotlib oder Plotly
- Identifizieren Sie Trends und Muster in der Nachrichtenstimmung im Zeitverlauf
Beispiel 2: Erstellen eines Preisüberwachungstools
- Scraping von Produktinformationen von E-Commerce-Websites:
- Identifizieren Sie die zu scrapenden E-Commerce-Websites
- Bestimmen Sie die Struktur der Produktinformationen (Name, Preis, Verfügbarkeit usw.).
- Verwenden Sie Web Scraping-Techniken, um Produktdaten von mehreren Websites zu extrahieren
- Einrichten von Warnungen und Benachrichtigungen:
- Definieren Sie Preisschwellen oder Verfügbarkeitskriterien für jedes Produkt
- Implementieren Sie einen Mechanismus zum Vergleichen der Scraped-Preise mit den definierten Schwellenwerten
- Richten Sie E-Mail- oder SMS-Benachrichtigungen ein, um Benutzer zu benachrichtigen, wenn Preise fallen oder Produkte verfügbar werden
- Bereitstellen des Scrapers in der Cloud:
- Wählen Sie eine Cloud-Plattform (z. B. AWS, Google Cloud, Heroku)
- Konfigurieren Sie die erforderliche Umgebung und Abhängigkeiten
- Planen Sie die Ausführung des Scrapers in regelmäßigen Abständen
- Speichern Sie die Scraped-Daten in einer Cloud-basierten Datenbank für einfachen Zugriff und Überwachung
Frameworks und Tools zum Web Scraping
Ich weiß, dass die Begriffe „Framework“ und „Bibliothek“ synonym verwendet werden, aber sie bedeuten unterschiedliche Dinge und werden für unterschiedliche Zwecke eingesetzt.
Mit Bibliotheken wie Request oder BeautifulSoup können Sie Web Scraper von Grund auf neu erstellen. Mit Frameworks können Sie den Prozess jedoch vereinfachen, da es sich dabei um eine Sammlung von Tools und Bibliotheken handelt.
Betrachten wir es einmal so: Bibliotheken sind wie Autos mit manueller Steuerung. Sie geben Ihnen die volle Kontrolle, erfordern aber mehr Aufwand und Geschick bei der Navigation. Frameworks hingegen sind wie Autos mit Automatikgetriebe. Sie bieten ein reibungsloseres und effizienteres Erlebnis, indem sie viele der mühsamen Aspekte des Scrapings vereinfachen.
Einige der beliebtesten Optionen sind:
Scrapy
Scrapy ist ein Framework für Python mit einem vollständigen Ökosystem zum Erstellen skalierbarer und effizienter Web Scraper. Seine wichtigsten Funktionen sind:
- Schnell durch Design.
- Es ist nicht erforderlich, Code zum Generieren von CSV-, JSON- und anderen Dateien hinzuzufügen.
- Unterstützung für XPath und CSS-Selektoren.
- Tolles Erweiterungs-Ökosystem, wie z. B. Unterstützung für Middleware.
- Integration mit Artikel-Pipelines zur Datenverarbeitung und -speicherung
PySpider
PySpider ist ebenfalls ein Framework für Python, aber im Gegensatz zu Scrapy ist es mit JavaScript kompatibel, was seine Stärke ist. Es ist auch ideal für Anfänger. Zu seinen wichtigsten Funktionen gehören:
- Unterstützung für JavaScript-Rendering mit PhantomJS oder Puppeteer
- Integrierte Aufgabenwarteschlange und Aufgabenplaner
- Integration mit Datenbanken und Nachrichtenwarteschlangen
- Unterstützt Parallelität
Web Scraping Tools und Dienste
Zusätzlich zu Frameworks gibt es einige Tools und Dienste, die Ihnen das Scraping erleichtern. Das Beste daran ist, dass sie nur minimalen Programmieraufwand erfordern. Einige Optionen sind:
- Octoparse: Ein Cloud-basiertes Web-Scraping-Tool mit einer Point-and-Click-Oberfläche zum Extrahieren von Daten von Websites.
- ParseHub: Eine Desktopanwendung, mit der Sie Web Scraper erstellen können, indem Sie Elemente auf einer Webseite visuell auswählen.
- Import.io: Eine webbasierte Plattform, die Tools zum Extrahieren von Daten von Websites und APIs bereitstellt.
Zusammenfassung der Grundlagen des Web Scraping
In diesem Handbuch haben wir die Grundlagen des Web Scraping im Großen und Ganzen behandelt, z. B. das Verständnis der Website-Struktur, ethische Überlegungen, grundlegende und fortgeschrittene Techniken sowie zusätzliche Tools und Frameworks.
Sie können jetzt loslegen, aber Sie sollten Ihr Wissen durch die Lektüre zusätzlicher Ressourcen erweitern, beispielsweise der offiziellen Dokumentation von Bibliotheken und Frameworks sowie Tutorials zum Web Scraping.
Versuchen Sie auch, sich von erfahrenen Scrapern in Scraping-Communitys und Foren beraten zu lassen. Isolieren Sie sich nicht, wir brauchen einander.
Wir waren alle einmal Anfänger. Seien Sie also nicht zu streng mit sich selbst, fangen Sie klein an und üben Sie regelmäßig. Mit genügend Übung und Hingabe werden Sie sehen, wie Sie mit der Zeit auch komplexere Projekte bewältigen können.