Scrapy-Untersuchung der zugrunde liegenden Architektur und Quellcode-Analyse

WBOY
Freigeben: 2023-06-22 19:58:38
Original
1134 Leute haben es durchsucht

Scrapy-Untersuchung der zugrunde liegenden Architektur und Quellcode-Analyse

Scrapy ist ein effizientes Web-Crawler-Framework, das auf Python basiert. Es kann schnell und einfach Daten aus Webseiten extrahieren und unterstützt verschiedene Datenspeicher- und Exportformate. Es ist bei vielen Crawlern zu einer beliebten Wahl geworden Enthusiasten und Entwickler bevorzugtes Framework. Scrapy verwendet in seiner zugrunde liegenden Implementierung ein asynchrones I/O-Modell und einen Middleware-Mechanismus, wodurch es effizienter und skalierbarer wird. In diesem Artikel werden wir die Implementierung von Scrapy sowohl anhand der zugrunde liegenden Architektur als auch anhand der Quellcodeanalyse untersuchen.

1. Die zugrunde liegende Architektur von Scrapy

Die zugrunde liegende Architektur von Scrapy ist hauptsächlich in fünf Module unterteilt: Engine, Scheduler, Downloader, Spider und Pipeline. Sie erfüllen ihre eigenen Aufgaben in Scrapy und arbeiten zusammen, um den gesamten Crawling-Prozess reibungslos und effizient zu gestalten.

  1. Engine

Die Engine von Scrapy dient als Kern des gesamten Crawler-Frameworks und ist für die Koordination der Interaktion zwischen verschiedenen Modulen und die Verarbeitung von Ereignissen und Signalen zwischen den einzelnen Modulen verantwortlich. Wenn die Engine das Crawler-Startsignal empfängt, ruft sie ein zu crawlendes Anforderungsobjekt im Scheduler ab und sendet das Objekt dann zum Herunterladen an den Downloader. Nach Abschluss des Downloads sendet der Downloader das zurückgegebene Antwortobjekt an die Engine . Die Engine Das Antwortobjekt wird zunächst zur Analyse an Spider übergeben, und auf der Grundlage der von Spider zurückgegebenen Ergebnisse wird ein neues Anforderungsobjekt generiert. Anschließend wird das neue Anforderungsobjekt an den Planer gesendet. Dieser Prozess wird in einer Schleife ausgeführt, bis die Scheduler-Warteschlange leer ist und der Crawler nicht beendet wird.

2. Scheduler (Scheduler)

Der Scheduler wird zum Speichern und Verwalten aller auf das Crawlen wartenden Anforderungsobjekte verwendet und ist für die Anordnung der Reihenfolge ihrer Anforderungen verantwortlich. Dadurch wird das Anforderungsobjekt dedupliziert und Anforderungen mit niedrigerer Priorität entfernt. Wenn die Engine das nächste zu crawlende Anforderungsobjekt abrufen muss, ruft sie die Methode des Schedulers auf, um es abzurufen. Immer wenn ein Request-Objekt heruntergeladen wird, übergibt der Downloader das zurückgegebene Response-Objekt und das entsprechende Request-Objekt an den Scheduler, und der Scheduler speichert sie in der Request-Warteschlange.

3. Downloader

Der Downloader wird hauptsächlich verwendet, um das von der Engine übergebene Request-Objekt in ein Response-Objekt umzuwandeln und an die Engine zurückzugeben. Der Downloader ruft den entsprechenden Webseiteninhalt von der angegebenen URL-Adresse ab, indem er eine HTTP- oder HTTPS-Anfrage sendet. Der Downloader stellt auch einige Download-Middleware bereit, und Sie können während des Downloadvorgangs einige benutzerdefinierte Verarbeitungsschritte hinzufügen, z. B. Proxy, UA-Identifizierung, Cookie-Verarbeitung usw.

4. Spider

Das Crawler-Modul ist die eigentliche Crawling-Logik. Es ist hauptsächlich dafür verantwortlich, den heruntergeladenen Webseiteninhalt zu analysieren, die analysierten Ergebnisse in Item-Objekte zu kapseln und die Item-Objekte dann an die Engine zurückzugeben. Das Crawler-Modul erfordert normalerweise das Schreiben einer benutzerdefinierten Crawler-Klasse und das Umschreiben einiger Methoden, um die Seitenanalyse, die Kapselung von Item-Objekten und die Generierung von Request-Objekten durchzuführen.

5. Pipeline

Das Pipeline-Modul wird verwendet, um eine Reihe von Verarbeitungen für die von Spider zurückgegebenen Item-Objekte durchzuführen, z. B. Datenbereinigung, Deduplizierung, Speicherung in Datenbanken oder Dateien usw. In Scrapy können Sie mehrere Pipeline-Klassen schreiben und eine Pipeline-Kette in der Reihenfolge ihrer Priorität bilden. Wenn der Spider das Item-Objekt zurückgibt, werden diese Pipelines der Reihe nach verarbeitet.

2. Scrapy-Quellcode-Analyse

  1. Spider-Klasse

Die Spider-Klasse ist die Basisklasse aller benutzerdefinierten Crawler-Klassen und enthält die wichtigsten Implementierungsmethoden des Crawling-Prozesses.

Zuerst müssen wir einige Attribute in unserer Crawler-Klasse definieren, wie z. B. Name, erlaubte_Domänen, Start-URLs usw. Diese Attribute werden verwendet, um den Namen des Crawlers, die Domänennamen, die gecrawlt werden dürfen, und die URL-Adresse anzugeben, von der aus das Crawlen beginnt.

Durch Überschreiben der start_requests()-Methode können wir den ersten Stapel von Anfragen generieren und sie zum Crawlen an die Engine übergeben.

Als nächstes müssen wir die Methode parse() definieren, die hauptsächlich zum Parsen des heruntergeladenen Webseiteninhalts verwendet wird, einschließlich des Extrahierens von Daten, des Generierens neuer Anforderungsobjekte usw. Die Methode parse() wird von der Engine aufgerufen. Bei dieser Methode wird die Webseite Schritt für Schritt analysiert und schließlich ein Item-Objekt oder ein neues Request-Objekt zurückgegeben.

  1. Item-Klasse

In Scrapy wird die Item-Klasse verwendet, um aus Webseiten extrahierte Daten zu kapseln. Es handelt sich tatsächlich um ein Wörterbuchobjekt. Im Item-Objekt können verschiedene Arten von Datenfeldern bereitgestellt werden, und im Crawler kann eine einfache Datenverarbeitungslogik implementiert werden, z. B. Datenbereinigung, Datenzuordnung usw. Das Item-Objekt wird schließlich an die Engine zurückgegeben und wiederum von der Pipeline verarbeitet.

  1. Einstellungsmodul

Das Einstellungsmodul wird zum Festlegen von Scrapy-Konfigurationsinformationen verwendet, einschließlich des Namens des Crawlers, der Anforderungsverzögerung, der Anzahl der Parallelitäten, des Download-Timeouts usw. Sie können die Art und Weise ändern, wie Scrapy ausgeführt wird, indem Sie die Optionen im Modul „Einstellungen“ ändern. Im Crawler-Code kann über das Settings-Attribut in der Crawler-Klasse auf das Settings-Modul zugegriffen werden. Alle Optionen im Einstellungsmodul werden in Form eines Wörterbuchs gespeichert. Wir können die Optionswerte im Einstellungsmodul direkt im Code ändern oder die Konfigurationsinformationen aus der Datei lesen.

  1. Downloader-Middleware (Download-Middleware)

Die Download-Middleware in Scrapy kann die vom Downloader initiierten Anfragen und die empfangenen Antworten abfangen. Sie kann die Anfragen oder Antworten ändern, Agenten, UA-Kennungen, Cookies usw. hinzufügen. Scrapy unterstützt mehrere Middlewares, die nacheinander in der Reihenfolge ihrer Priorität ausgeführt werden können. Middleware fängt ab und verarbeitet sie, indem sie die Methoden Process_request(), Process_response() oder Process_Exception() überschreibt.

  1. Spider-Middleware (Spider-Middleware)

Spider-Middleware wird zum Abfangen der Ein- und Ausgabe von Spider verwendet. Sie besteht aus zwei Teilen: Downloader-Middleware, die Anfragen abfängt, und Spider-Middleware, die Antworten abfängt. Middleware fängt ab und verarbeitet sie, indem sie die Methoden „process_spider_input()“ und „process_spider_output()“ überschreibt.

Das Scrapy-Framework ist sehr leistungsstark und kann an eine Vielzahl von Websites angepasst werden. Es bietet umfangreiche Funktionen und erweiterte Schnittstellen und eignet sich sehr gut für das groß angelegte, effiziente und stabile Crawlen von Webdaten. Gleichzeitig weist Scrapy jedoch auch einige eigene Mängel auf, z. B. unzureichende Unterstützung für das Crawlen von Websites mit JavaScript-Rendering, unzureichende Unterstützung für AJAX-Echtzeitanforderungen usw. Diese müssen mit anderen Tools kombiniert werden, um zusammenzuarbeiten.

Das obige ist der detaillierte Inhalt vonScrapy-Untersuchung der zugrunde liegenden Architektur und Quellcode-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage