Scrapy gegen Pyspider: Was ist besser für Web Scraping?

Vergleichen Sie Scrapy gegen Pyspider für Web Scraping und wählen Sie das beste Tool für Ihre Web Scraping Bedürfnisse.
11 min lesen
Scrapy vs Pyspider blog image

In diesem Scrapy vs Pyspider Leitfaden werden Sie lernen:

  • Was Scrapy und Pyspider sind
  • Ein Vergleich zwischen Scrapy und Pyspider für Web Scraping
  • Wie man sowohl Scrapy als auch Pyspider für Web Scraping verwendet
  • Gemeinsame Einschränkungen von Scrapy und Pyspider bei Web-Scraping-Szenarien

Lasst uns eintauchen!

Was ist Scrapy?

Scrapy ist ein in Python geschriebenes Open-Source-Framework für Web-Scraping. Sein Hauptziel ist es, Daten aus Websites schnell und effizient zu extrahieren. Im Detail ermöglicht es Ihnen,:

  • Definieren Sie, wie Sie auf einer oder mehreren Webseiten navigieren und Informationen sammeln können.
  • Handhabung von Aspekten wie HTTP-Anfragen, Linkverfolgung und Datenextraktion.
  • Vermeiden Sie Sperrungen, indem Sie die Anforderungsgeschwindigkeit durch Drosselung und asynchrone Anforderungen anpassen.
  • Verwalten Sie Proxies und Proxy-Rotation über benutzerdefinierte Middleware oder die scrapy-rotating-proxies-Bibliothek.

Was ist Pyspider?

Pyspider ist ein in Python geschriebenes Open-Source-Webcrawling-Framework. Es wurde entwickelt, um Daten aus Websites mit Leichtigkeit und Flexibilität zu extrahieren, und ermöglicht es Ihnen,:

  • Definieren Sie, wie Sie durch eine oder mehrere Webseiten navigieren und Informationen über die Befehlszeilenschnittstelle (CLI) oder eine benutzerfreundliche Webschnittstelle abrufen können.
  • Behandlung von Aspekten wie Aufgabenplanung, Wiederholungen und Datenspeicherung.
  • Begrenzen Sie Blöcke, indem Sie verteiltes Crawling und priorisierte Aufgaben unterstützen.
  • Verwalten Sie komplexe Workflows und Datenverarbeitung mit integrierter Unterstützung für Datenbanken und Nachrichtenwarteschlangen.

Scrapy vs. Pyspider: Funktionsvergleich für Web Scraping

Nachdem Sie nun gelernt haben, was Scrapy und Pyspider sind, ist es an der Zeit, sie für Web Scraping zu vergleichen:

Merkmal Scrapy Pyspider
Anwendungsfall Groß angelegte und komplexe Scraping-Projekte Geplante Scraping-Aufgaben
Scraping-Verwaltung CLI CLI und UI
Parsing-Methoden XPath und CSS-Selektoren CSS-Selektoren
Speicherung von Daten Kann Daten in CSVs und andere Dateiformate exportieren Automatisches Speichern der Daten in der Datenbank
Wiederholung Erfordert manuellen Eingriff zur Wiederholung Versucht automatisch, fehlgeschlagene Aufgaben zu wiederholen
Aufgaben-Planung Benötigt externe Integrationen Nativ unterstützt
Proxy-Rotation Unterstützt Proxy-Rotation über Middlewares Erfordert manuellen Eingriff
Gemeinschaft Hige Community, derzeit mit mehr als 54k GitHub-Sternen, die aktiv dazu beiträgt Riesige Gemeinschaft, derzeit mit mehr als 16k GitHub-Sternen, aber archiviert seit 11. Juni 2024

Die obige Vergleichstabelle Scrapy vs. Pyspider zeigt, dass diese beiden Bibliotheken ähnlich sind. Die wichtigsten Unterschiede auf hohem Niveau sind:

  • Scrapy kann nur über die CLI verwendet werden, während Pyspider auch eine Benutzeroberfläche bietet.
  • Scrapy kann XPath- und CSS-Selektoren parsen, während Pyspider nur CSS-Selektoren unterstützt.
  • Scrapy unterstützt automatisch die Proxy-Rotation über eine eigene Middleware-Logik.

Was jedoch wirklich wichtig ist, ist die Tatsache, dass Pyspider nicht mehr unterstützt wird:

Pyspider archiviertes GitHub-Repository

Scrapy gegen Pyspider: Direkter Scraping-Vergleich

Nach dem Vergleich zwischen Scrapy und Pyspider haben Sie erfahren, dass diese beiden Frameworks ähnliche Web-Scraping-Funktionen bieten. Aus diesem Grund ist der beste Weg, sie zu vergleichen, ein konkretes Programmierbeispiel.

Die nächsten beiden Abschnitte zeigen Ihnen, wie Sie Scrapy und Pyspider verwenden, um dieselbe Website zu scrapen. Im Einzelnen wird die Zielseite die Seite “Hokey Teams” aus Scrape This Site sein. Sie enthält Eishockeydaten in Tabellenform:

Die abzurufenden Tabellendaten

Das Ziel dieser Abschnitte ist es, alle Daten aus der Tabelle abzurufen und sie lokal zu speichern. Mal sehen, wie das geht!

Wie man Scrapy für Web Scraping verwendet

In diesem Abschnitt erfahren Sie, wie Sie Scrapy verwenden, um alle Daten aus der von der Ziel-Website bereitgestellten Tabelle abzurufen.

Anforderungen

Um diesem Tutorial zu folgen, müssen Sie Python 3.7 oder höher auf Ihrem Rechner installiert haben.

Schritt 1: Einrichten der Umgebung und Installieren von Abhängigkeiten

Angenommen, Sie nennen den Hauptordner Ihres Projekts hockey_scraper/. Am Ende dieses Schritts wird der Ordner die folgende Struktur haben:

hockey_scraper/
   └── venv/

Sie können das Verzeichnis venv/ virtual environment wie folgt erstellen:

python -m venv venv

Um es zu aktivieren, führen Sie unter Windows aus:

venv\Scripts\activate

Unter macOS/Linux führen Sie entsprechend aus:

source venv/bin/activate

Jetzt können Sie Scrapy mit installieren:

pip install scrapy

Schritt 2: Ein neues Projekt starten

Nun können Sie ein neues Scrapy-Projekt starten. Geben Sie im Hauptordner hockey_scraper/ ein:

scrapy startproject hockey

Mit diesem Befehl erstellt Scrapy einen Hockey/Ordner. Darin werden automatisch alle benötigten Dateien erstellt. Dies ist die resultierende Ordnerstruktur:

hockey_scraper/ 
    ├── hockey/ # Main Scrapy project folder
    │   ├── __init__.py  
    │   ├── items.py # Defines the data structure for scraped items 
    │   ├── middlewares.py # Custom middlewares
    │   ├── pipelines.py # Handles post-processing of scraped data 
    │   ├── settings.py # Project settings 
    │   └── spiders/ # Folder for all spiders  
    ├── venv/ 
    └── scrapy.cfg # Scrapy configuration file

Schritt #3: Erzeugen Sie die Spinne

Um einen neuen Spider zu erzeugen, der die Ziel-Website crawlt, gehen Sie zunächst in den Ordner hockey/:

cd hockey

Erzeugen Sie dann eine neue Spinne mit:

scrapy genspider data https://www.scrapethissite.com/pages/forms/

In diesem Skript steht data für den Namen des Spiders. Scrapy erstellt automatisch eine Datei data.py im Ordner spiders/. Diese Datei enthält die erforderliche Scraping-Logik, um die Daten des Hokey-Teams abzurufen.

Schritt #4: Definieren Sie die Scraping-Logik

Sie können nun die Scraping-Logik codieren. Sehen Sie sich zunächst die Tabelle mit den gewünschten Daten in Ihrem Browser an. Sie können sehen, dass die Daten in einem .table-Element enthalten sind:

Die Tabellenklasse in der HTML n der HTML-Code der Zielwebseite

Um alle Daten zu erhalten, schreiben Sie den folgenden Code in die Datei data.py:

import scrapy

class DataSpider(scrapy.Spider):
    name = "data"
    allowed_domains = ["www.scrapethissite.com"]
    start_urls = ["https://www.scrapethissite.com/pages/forms/"]
    
    def parse(self, response):
        for row in response.css("table.table tr"):
            yield {
                "name": row.css("td.name::text").get(),
                "year": row.css("td.year::text").get(),
                "wins": row.css("td.wins::text").get(),
                "losses": row.css("td.losses::text").get(),
                "ot_losses": row.css("td.ot-losses::text").get(),
                "pct": row.css("td.pct::text").get(),
                "gf": row.css("td.gf::text").get(),
                "ga": row.css("td.ga::text").get(),
                "diff": row.css("td.diff::text").get(),
            }

Beachten Sie, dass die Variablen name, allowed_domains und start_urls im vorherigen Schritt automatisch von Scrapy erstellt wurden.

Auch die parse() -Methode wurde von Scrapy automatisch erstellt. Sie müssen in diesem Schritt also nur noch die Scraping-Logik hinzufügen, die sich unter der for-Schleife befindet.

Im Einzelnen sucht die Methode response.css() nach der Tabelle. Dann durchläuft der Code alle Zeilen der Tabelle und ruft die Daten ab.

Schritt 5: Starten Sie den Crawler und speichern Sie die Daten in einer CSV-Datei

Um den Crawler zu starten und die gesammelten Daten in einer CSV-Datei zu speichern, geben Sie Folgendes ein:

scrapy crawl data -o output.csv

Mit diesem Code kann Scrapy:

  • Führt die Datei data.py aus, die die Scraping-Logik enthält
  • Speichert die ausgewerteten Daten in einer CSV-Datei namens output.csv

Die erwartete output.csv-Datei, die vom Scraper erzeugt wird, lautet:

Die erwartete CSV-Datei

Beachten Sie, dass diese Art der Verwendung von Scrapy die kürzeste ist, aber nicht die einzige. Scrapy bietet verschiedene Anpassungen und Einstellungen, und Sie können mehr darüber in unserem Artikel über Scrapy vs. Requests erfahren.

Wie man Pyspider für Web Scraping verwendet

Sehen Sie sich an, wie Sie mit Pyspider die gleiche Ziel-Website scrapen können.

Anforderungen

Pyspider unterstützt Python 3.6 als die neueste Version. Wenn Sie spätere Python-Versionen installiert haben, lesen Sie den folgenden Schritt, um zu erfahren, wie Sie die Version 3.6 verwenden können.

Schritt 1: Einrichten der Umgebung und Installieren von Abhängigkeiten

Angenommen, Sie nennen den Hauptordner Ihres Projekts hockey_scraper/.

Wenn Sie Python 3.7 oder höher haben, installieren Sie pyenv, um Python 3.6 zu erhalten.

Verwenden Sie pyenv, um Python 3.6 mit diesem Befehl zu installieren:

pyenv install 3.6.15

Dann machen Sie es zur lokalen Version von Python, so dass Sie nicht das ganze System mit einer anderen Version beeinflussen:

pyenv local 3.6.15

Um sicherzugehen, dass alles in Ordnung ist, überprüfen Sie die Python-Version:

python --version

Das Ergebnis muss sein:

Python 3.6.15

Erstellen Sie eine virtuelle Umgebung, indem Sie die richtige Python-Version auswählen:

python3.6 -m venv venv

Aktivieren Sie die virtuelle Umgebung wie im vorigen Kapitel dieses Handbuchs beschrieben. Jetzt können Sie Pyspider mit installieren:

pip install pyspider

Um die Benutzeroberfläche zu starten, führen Sie:

pyspider

Beachten Sie, dass Sie, da dieses Repository archiviert ist und Sie Python 3.6 verwenden, einige Fehler erhalten werden. Um diese zu beheben, müssen Sie möglicherweise die folgenden Bibliotheken installieren:

pip install tornado==4.5.3 requests==2.25.1

Möglicherweise erhalten Sie auch andere Fehler im Zusammenhang mit der Datei webdav.py. Suchen Sie nach der Datei und beheben Sie die folgenden Fehler:

  • Benennen Sie in der Klasse ScriptProvider() die Methode getResourceInst() in get_resource_inst() um .
  • Suchen Sie am Ende der Datei nach der Variable config = DEFAULT_CONFIG.copy() und ändern Sie den gesamten nachfolgenden Code in:
config = DEFAULT_CONFIG.copy()
config.update({
    "mount_path": "/dav",
    "provider_mapping": {
        "/": ScriptProvider(app)
    },
    "domaincontroller": NeedAuthController(app),
    "verbose": 1 if app.debug else 0,
    "dir_browser": {"davmount": False,
                    "enable": True,
                    "msmount": False,
                    "response_trailer": ""},
})
dav_app = WsgiDAVApp(config)

Die Web-UI von pyspider sollte nun starten können. Rufen Sie http://localhost:5000/ in Ihrem Browser auf, und Sie sollten das hier sehen:

Die Pyspider-Benutzeroberfläche

Schritt 2: Erstellen Sie ein neues Projekt

Klicken Sie auf “Erstellen”, um ein neues Projekt anzulegen, und füllen Sie die Felder aus:

  • Wählen Sie einen Projektnamen Ihrer Wahl, zum Beispiel Hockey_scraper.
  • Setzen Sie https://www.scrapethissite.com/pages/forms/ in das Feld Start-URL(s).

Dies sollte das Ergebnis sein:

Das Ergebnis der Projekterstellung in Pyspider

Schritt #3: Definieren Sie die Scraping-Logik

Implementieren Sie die Scraping-Logik, indem Sie den Python-Code direkt im Editor im rechten Teil der Benutzeroberfläche schreiben:

from pyspider.libs.base_handler import *

class Handler(BaseHandler):
    crawl_config = {}

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl("https://www.scrapethissite.com/pages/forms/", callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc("table.table tr").items():
            self.crawl(each.attr.href, callback=self.detail_page)

    @config(priority=2)
    def detail_page(self, response):
        return {
            "name": row.css("td.name::text").get(),
            "year": row.css("td.year::text").get(),
            "wins": row.css("td.wins::text").get(),
            "losses": row.css("td.losses::text").get(),
            "ot_losses": row.css("td.ot-losses::text").get(),
            "pct": row.css("td.pct::text").get(),
            "gf": row.css("td.gf::text").get(),
            "ga": row.css("td.ga::text").get(),
            "diff": row.css("td.diff::text").get(),
        }

Die Änderungen gegenüber dem Standardcode sind wie folgt

  • Die Methode response.doc() sucht nach der Zieltabelle.
  • detail_page() gibt die Zeilen zurück, die über die Methode row.css() abgefangen werden.

Klicken Sie auf “Speichern” und “Ausführen”, um den Scraping-Prozess zu starten. Die resultierenden Daten sind ähnlich wie die, die Sie mit Scrapy erhalten haben.

Großartig! Sie wissen jetzt, wie Sie Scrapy und Pyspider für Web Scraping verwenden können.

Scrapy gegen Pyspider: Welches soll man verwenden?

Der Vergleich zwischen Scrapy und Pyspider hat gezeigt, wie man sie benutzt, aber welcher ist besser? Zeit, das herauszufinden!

Wählen Sie Scrapy:

  • Für Hochleistungsprojekte, die paralleles Crawling und erweiterte Funktionen wie Drosselung benötigen.
  • Wenn Sie Ihr Scraping mit externen Pipelines oder anderen Tools integrieren müssen.
  • Wenn Sie mit CLI und Web Scraping Szenarien vertraut sind und ein aktuelles Framework bevorzugen.

Wählen Sie Pyspider, wenn:

  • Sie bevorzugen die Verwendung einer Benutzeroberfläche anstelle der CLI.
  • Sie möchten mit einem verteilten System arbeiten und bevorzugen einfache Konfigurationen.
  • Sie wollen Scraping-Aufgaben einplanen.

Wie immer gibt es keinen endgültigen Sieger – das beste Scraping-Tool hängt ganz von Ihren spezifischen Anforderungen und Ihrem Anwendungsfall ab.

Beschränkungen von Scrapy und Pyspider

Scrapy und Pyspider sind leistungsstarke Frameworks für Web-Scraping, aber sie haben ihre Grenzen.

Erstens haben sie Probleme mit dem Scrapen von Websites mit dynamischen Inhalten, die JavaScript für das Rendering oder den Datenabruf verwenden. Beide können zwar erweitert werden, um JavaScript-gestützte Websites zu scrapen, sind aber in dieser Hinsicht von Natur aus eingeschränkt. Dies macht sie auch anfälliger für gängige Anti-Scraping-Maßnahmen.

Außerdem unterliegen diese beiden Frameworks IP-Sperren, da sie viele automatische Anfragen stellen. Diese können Ratenbegrenzer auslösen, was dazu führt, dass Ihre IP auf eine schwarze Liste gesetzt wird. Eine Lösung, um zu verhindern, dass Ihre IP gesperrt wird, besteht darin, Proxys in Ihren Code zu integrieren.

Zur Proxy-Rotation siehe unsere Anleitung zur Verwendung von Proxies zur Rotation von IP-Adressen in Python.

Wenn Sie auf der Suche nach zuverlässigen Proxy-Servern sind, sollten Sie bedenken, dass das Proxy-Netzwerk von Bright Data das Vertrauen von Fortune-500-Unternehmen und über 20.000 Kunden weltweit genießt. Dieses umfangreiche Netzwerk umfasst:

Schlussfolgerung

In diesem Blogbeitrag über Scrapy und Pyspider haben Sie die Rolle der beiden Bibliotheken beim Web-Scraping kennengelernt. Sie haben ihre Funktionen für die Datenextraktion erforscht und ihre Leistung in einem realen Paginierungsszenario verglichen.

Pyspider bietet eine freundliche Benutzeroberfläche, ist aber leider veraltet. Scrapy hingegen ist für große Projekte nützlich, da es die meisten der für strukturiertes Scraping benötigten Werkzeuge bietet und die zugrunde liegende Technologie mit den neuesten Python-Versionen auf dem neuesten Stand ist.

Sie haben auch deren Grenzen entdeckt, wie etwa mögliche IP-Sperren. Glücklicherweise lassen sich diese Herausforderungen mit Proxys oder speziellen Web Scraping-Lösungen wie der Web Scraper API von Bright Data überwinden. Diese auf Scraping ausgerichtete API lässt sich nahtlos mit Scrapy, Pyspider und jedem anderen HTTP-Client oder Web-Scraping-Tool integrieren und ermöglicht eine uneingeschränkte Datenextraktion.

Erstellen Sie noch heute ein kostenloses Bright Data-Konto und erkunden Sie unsere Proxy- und Scraper-APIs!

Keine Kreditkarte erforderlich