Scrapy Splash Tutorial: Die Kunst des Scrapings von JavaScript-gerenderten Websites mit Scrapy und Splash beherrschen
Ștefan Răcila am 10. August 2023

In der komplexen Weblandschaft von heute, in der Inhalte oft dynamisch mit JavaScript, AJAX-Aufrufen oder anderen clientseitigen Skripten generiert werden, wird das Scraping von Informationen zu einer schwierigen Aufgabe. Herkömmliche Scraping-Techniken können bei der Extraktion von Daten, die asynchron geladen werden, versagen, so dass ein ausgefeilterer Ansatz erforderlich ist. An dieser Stelle kommt Scrapy Splash ins Spiel.
Scrapy Splash ist ein schlanker Browser, der mit einer HTTP-API ausgestattet ist. Im Gegensatz zu umfangreicheren Browsern ist er leichtgewichtig und dennoch leistungsstark. Er wurde entwickelt, um Websites zu scrapen, die ihre Inhalte mit JavaScript oder durch AJAX-Prozeduren darstellen. Durch die Simulation des Verhaltens eines echten Browsers kann Scrapy Splash mit dynamischen Elementen interagieren, was es zu einem unschätzbaren Werkzeug für alle Datenextraktionsanforderungen im Zusammenhang mit JavaScript-gerenderten Inhalten macht.
In diesem umfassenden Leitfaden werden wir die einzigartigen Fähigkeiten von Scrapy Splash erkunden und Schritt für Schritt zeigen, wie Sie dieses Tool effektiv nutzen können, um Daten von Websites zu scrapen, die JavaScript zum Rendern verwenden. Ganz gleich, ob Sie ein erfahrener Data Miner sind oder gerade erst anfangen, das Verständnis der Funktionen von Scrapy Splash wird Sie in die Lage versetzen, die Informationen, die Sie benötigen, aus einem zunehmend dynamischen Web zu gewinnen.
Bleiben Sie bei uns, wenn wir uns mit den Besonderheiten der Verwendung von Scrapy Splash für das Scraping des modernen, interaktiven Webs befassen, beginnend mit der Installation und endend mit Beispielen aus der Praxis.
Konfigurieren von Splash: Eine schrittweise Anleitung zur Installation und Konfiguration
Scrapy Splash ist ein äußerst leistungsfähiges Tool, das neue Möglichkeiten für das Scraping von Daten aus dynamischen Websites eröffnen kann. Bevor wir jedoch damit beginnen, die Vorteile von Scrapy Splash zu nutzen, müssen wir zunächst unsere Systeme einrichten. Dies umfasst mehrere wichtige Schritte, darunter die Installation von Docker, Splash, Scrapy und die notwendigen Konfigurationen, damit alles nahtlos zusammenarbeitet.
1) Einrichten und Installieren von Docker
Docker ist eine hochmoderne Containertechnologie, die es uns ermöglicht, die Splash-Instanz in einem virtuellen Container zu isolieren und auszuführen, um einen reibungslosen und konsistenten Betrieb zu gewährleisten.
Für Linux-Benutzer:
Führen Sie den folgenden Befehl im Terminal aus:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Für andere Betriebssysteme:
Benutzer von Windows, macOS und anderen Betriebssystemen finden detaillierte Installationsanleitungen auf der Docker-Website.
2) Herunterladen und Installieren von Splash über Docker
Wenn Sie Docker installiert haben, können Sie das Splash-Docker-Image herunterladen, das ein wesentlicher Bestandteil unserer Scraping-Infrastruktur ist.
Führen Sie den Befehl aus:
docker pull scrapinghub/splash
Dadurch wird das Bild heruntergeladen. Führen Sie es nun mit aus:
docker run -it -p 8050:8050 --rm scrapinghub/splash
Herzlichen Glückwunsch! Ihre Splash-Instanz ist jetzt auf localhost:8050 bereit. Sie sollten die Standard-Splash-Seite sehen, wenn Sie diese URL in Ihrem Browser aufrufen.
3) Installation von Scrapy und dem Scrapy-Splash Plugin
Scrapy ist ein flexibles Scraping-Framework, und das Scrapy-Splash-Plugin verbindet Scrapy mit Splash. Sie können beide mit installieren:
pip install scrapy scrapy-splash
Der obige Befehl lädt alle erforderlichen Abhängigkeiten herunter und installiert sie.
4) Ihr erstes Scrapy-Projekt erstellen
Beginnen Sie Ihre Scraping-Reise mit dem folgenden Befehl:
scrapy startprojekt splashscraper
Dadurch wird ein Scrapy-Projekt mit dem Namen splashscraper erstellt, das eine ähnliche Struktur hat:
splashscraper
├── scrapy.cfg
└── splashscraper
├── __init__.py
├── items.py
├── middlewares.py
├── pipelines.py
├── settings.py
└── spiders
└── __init__.py
5) Integration von Scrapy mit Splash
Jetzt kommt der wesentliche Teil - die Konfiguration von Scrapy für die Zusammenarbeit mit Splash. Dazu muss die Datei settings.py in Ihrem Scrapy-Projekt geändert werden.
Konfiguration der Splash-URL:
Definieren Sie eine Variable für Ihre Splash-Instanz:
SPLASH_URL = 'http://localhost:8050'
Downloader Middlewares:
Diese Einstellungen ermöglichen die Interaktion mit Splash:
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
}
Spider Middlewares and Duplicate Filters:
Further, include the necessary Splash middleware for deduplication:
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
Die übrigen Einstellungen können auf ihren Standardwerten bleiben.
Einen Scrapy Splash Spider schreiben
Das Scraping von Daten aus dynamischen Webseiten kann eine Interaktion mit JavaScript erfordern. An dieser Stelle kommt Scrapy Splash ins Spiel. Am Ende dieses Leitfadens werden Sie wissen, wie Sie einen Spider mit Scrapy Splash erstellen, um Zitate von quotes.toscrape.com zu scrapen.
Schritt 1: Generierung der Spinne
Wir werden den in Scrapy eingebauten Befehl verwenden, um einen Spider zu erzeugen. Der Befehl lautet:
scrapy genspider quotes quotes.toscrape.com
Bei der Ausführung wird eine neue Datei namens quotes.py im Verzeichnis spiders erstellt.
Schritt 2: Verstehen der Grundlagen einer Scrapy-Spinne
Wenn Sie die Datei quotes.py öffnen, werden Sie feststellen:
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
pass
- name: Der Name der Spinne
- erlaubte_domains: Beschränkt den Spider auf aufgelistete Domains
- start_urls: Die zu scrappenden URLs
- parsen: Die für jede URL aufgerufene Methode
Schritt 3: Scrapen von Daten von einer einzelnen Seite
Nun wollen wir die Spinne funktionsfähig machen.
a) Elemente mit Hilfe eines Webbrowsers inspizieren
Verwenden Sie die Entwicklerwerkzeuge, um die HTML-Struktur zu analysieren. Sie werden feststellen, dass jedes Zitat in einem div-Tag mit dem Klassennamen quote eingeschlossen ist.
b) Bereiten Sie die Klasse SplashscraperItem vor
Ändern Sie die Datei items.py so, dass sie drei Felder enthält: Autor, Text und Tags:
import scrapy
class SplashscraperItem(scrapy.Item):
author = scrapy.Field()
text = scrapy.Field()
tags = scrapy.Field()
c) Implementierung der Methode parse()
Importieren Sie die Klasse SplashscraperItem und aktualisieren Sie die Parse-Methode in quotes.py:
from items import SplashscraperItem
def parse(self, response):
for quote in response.css("div.quote"):
text = quote.css("span.text::text").extract_first("")
author = quote.css("small.author::text").extract_first("")
tags = quote.css("meta.keywords::attr(content)").extract_first("")
item = SplashscraperItem()
item['text'] = text
item['author'] = author
item['tags'] = tags
yield item
Schritt 4: Handhabung der Paginierung
Fügen Sie Code hinzu, um durch alle Seiten zu navigieren:
next_url = response.css("li.next>a::attr(href)").extract_first("")
if next_url:
yield scrapy.Request(next_url, self.parse)
Schritt 5: Hinzufügen von Splash Requests für dynamische Inhalte
Um SplashRequest zu verwenden, müssen Sie Änderungen an der aktuellen Spinne vornehmen:
from scrapy_splash import SplashRequest
def start_requests(self):
url = 'https://quotes.toscrape.com/'
yield SplashRequest(url, self.parse, args={'wait': 1})
Aktualisieren Sie die Parse-Methode, um auch SplashRequest zu verwenden:
if next_url:
yield scrapy.SplashRequest(next_url, self.parse, args={'wait': 1})
Herzlichen Glückwunsch! Sie haben gerade einen voll funktionsfähigen Scrapy-Spider geschrieben, der Splash zum Scrapen dynamischer Inhalte verwendet. Sie können nun den Spider ausführen und alle Zitate, Autoren und Tags von quotes.toscrape.com extrahieren.
Der Code bietet eine hervorragende Vorlage für das Scraping anderer dynamischer Websites mit ähnlichen Strukturen. Viel Spaß beim Scrapen!
Behandlung von Splash-Antworten in Scrapy
Splash-Antworten in Scrapy enthalten einige einzigartige Merkmale, die sich von Standard-Scrapy-Antworten unterscheiden. Sie werden je nach Art der Antwort auf eine bestimmte Weise behandelt, aber der Extraktionsprozess kann mit den bekannten Scrapy-Methoden durchgeführt werden. Schauen wir uns das mal an.
Verstehen, wie Splash auf Anfragen und sein Response-Objekt antwortet
Wenn Scrapy Splash eine Anfrage verarbeitet, gibt es je nach Anfragetyp unterschiedliche Antwortunterklassen zurück:
- SplashResponse: Für binäre Splash-Antworten, die Mediendateien wie Bilder, Videos, Audios usw. enthalten.
- SplashTextResponse: Wenn das Ergebnis in Textform vorliegt.
- SplashJsonResponse: Wenn das Ergebnis ein JSON-Objekt ist.
Analysieren von Daten aus Splash-Antworten
Die in Scrapy eingebauten Parser- und Selector-Klassen können zum Parsen von Splash Responses verwendet werden. Das bedeutet, dass, obwohl die Antworttypen unterschiedlich sind, die Methoden zum Extrahieren von Daten aus ihnen die gleichen bleiben.
Hier ein Beispiel für das Extrahieren von Daten aus einer Splash-Antwort:
text = quote.css("span.text::text").extract_first("")
author = quote.css("small.author::text").extract_first("")
tags = quote.css("meta.keywords::attr(content)").extract_first("")
Erläuterung:
- .css("span.text::text"): Dies verwendet CSS-Selektoren, um das span-Element mit der Klasse text zu finden, und ::text weist Scrapy an, die Eigenschaft text aus diesem Element zu extrahieren.
- .css("meta.keywords::attr(content)"): Hier wird ::attr(content) verwendet, um das Inhaltsattribut des Meta-Tags mit der Klasse keywords zu erhalten.
Schlussfolgerung
Die Verarbeitung von Splash-Antworten in Scrapy erfordert keine spezielle Behandlung. Sie können immer noch die vertrauten Methoden und Syntax verwenden, um Daten zu extrahieren. Der Hauptunterschied liegt im Verständnis des Typs der zurückgegebenen Splash-Antwort, die ein Standardtext, binär oder JSON sein kann. Diese Typen können ähnlich wie reguläre Scrapy-Antworten behandelt werden, so dass ein reibungsloser Übergang möglich ist, wenn Sie Splash zu einem bestehenden Scrapy-Projekt hinzufügen möchten.
Viel Spaß beim Scrapen mit Splash!
Nachrichten und Aktualisierungen
Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Erforschen Sie den detaillierten Vergleich zwischen Scrapy und Selenium für Web Scraping. Von der Datenerfassung in großem Maßstab bis hin zum Umgang mit dynamischen Inhalten - entdecken Sie die Vor- und Nachteile sowie die einzigartigen Funktionen der beiden Frameworks. Erfahren Sie, wie Sie das beste Framework für die Anforderungen und den Umfang Ihres Projekts auswählen können.


Erforschen Sie einen detaillierten Vergleich zwischen Scrapy und Beautiful Soup, zwei führenden Web-Scraping-Tools. Verstehen Sie ihre Funktionen, Vor- und Nachteile und entdecken Sie, wie sie zusammen verwendet werden können, um verschiedene Projektanforderungen zu erfüllen.


Erfahren Sie, welcher Browser am besten geeignet ist, um Cloudflare-Erkennungssysteme beim Web-Scraping mit Selenium zu umgehen.
