Warum Scrapy?
Scrapy ist eine robuste Web -Scraping -Bibliothek, die die Möglichkeit bietet, Webseiten, Bilder und Daten herunterzuladen, an die Sie sich bei Blitzgeschwindigkeit vorstellen können. Die Geschwindigkeit ist bei der Berechnung von großer Bedeutung, und Scrapy funktioniert daran, indem sie asynchron auf Websites besucht und eine Menge Hintergrundarbeit erledigt, was die gesamte Aufgabe einfach aussieht.
Es sollte gesagt werden, dass Python andere Bibliotheken hat, mit denen Daten von Websites abgeschrocknet werden können, aber keiner ist vergleichbar mit Scrapy, wenn es um Effizienz geht.
Installation
Schauen wir uns einen kurzen Blick darauf an, wie diese leistungsstarke Bibliothek auf Ihrem Computer installiert werden kann.
Wie bei den meisten Python -Bibliotheken können Sie Scrapy mit dem PIP -Modul installieren:
PIP Installieren Sie ScrapySie können überprüfen, ob die Installation erfolgreich war, indem Sie Scrapy in Pythons interaktiver Shell importieren.
$ pythonGeben Sie "Hilfe", "Copyright", "Credits" oder "Lizenz" für weitere Informationen ein.
>>> Scrapy importierenJetzt, da wir mit der Installation fertig sind, lassen Sie uns mitten in die Dinge einsteigen.
Erstellen eines Web -Scraping -Projekts
Während der Installation wurde das Scrapy -Schlüsselwort zu Pfad hinzugefügt, damit wir das Schlüsselwort direkt über die Befehlszeile verwenden können. Wir würden dies während unserer gesamten Nutzung der Bibliothek ausnutzen.
Führen Sie aus dem Verzeichnis Ihrer Wahl den folgenden Befehl aus:
Scrapy StartProject WebcraperDies würde ein Verzeichnis namens erstellen Webcraper im aktuellen Verzeichnis und im Scrapy.CFG -Datei. Im Webcraper Verzeichnis hätte __drin__.Py, Gegenstände.Py, Middlewares.PY, Pipelines.PY, Einstellungen.py Dateien und ein Verzeichnis aufgerufen Spinnen.
Unsere Spinnendateien i.e. Das Skript, das für uns das Webcraping macht, wird in der gespeichert Spinnen Verzeichnis.
Schreiben Sie unsere Spinne
Bevor wir unsere Spinne schreiben, wird erwartet, dass wir bereits wissen, welche Website wir kratzen möchten. Für den Zweck dieses Artikels kratzen wir eine Beispiel -Web -Craping -Website: http: // Beispiel.Webcraping.com.
Diese Website hat nur Ländernamen und ihre Flaggen mit verschiedenen Seiten und wir werden drei der Seiten verschrotten. Die drei Seiten, an denen wir arbeiten würden, sind:
http: // Beispiel.Webcraping.com/places/default/index/0
http: // Beispiel.Webcraping.com/places/default/index/1
http: // Beispiel.Webcraping.com/places/default/index/2
Zurück zu unserer Spinne werden wir einen Sample_spider erstellen.PY im Spinnenverzeichnis. Vom Terminal ein einfaches Berühren Sie sample_spider.py Der Befehl würde helfen, eine neue Datei zu erstellen.
Nach dem Erstellen der Datei würden wir sie mit den folgenden Codezeilen bevölkern:
Scrapy importierenFühren Sie den folgenden Befehl aus der oberen Ebene des Projektverzeichnisses aus:
Scrawy Crawl -ProbeErinnern Sie sich, dass wir unseren gegeben haben Samplespider Klasse a Name Attribut Probe.
Nachdem Sie diesen Befehl ausgeführt haben, würden Sie feststellen, dass drei Dateien mit dem Namen Page0 mit dem Namen.HTML, Seite1.HTML, Seite 2.HTML werden im Verzeichnis gespeichert.
Schauen wir uns an, was mit dem Code passiert:
Scrapy importierenZuerst importieren wir die Bibliothek in unseren Namespace.
Klassenprobenplespider (Scrapy.Spinne):Dann erstellen wir eine Spinnenklasse, die wir nennen Samplespider. Unsere Spinne erbt von Scrapy.Spinne. Alle unsere Spinnen müssen von Scrapy erben.Spinne. Nach dem Erstellen der Klasse geben wir unserer Spinne a Name Attribut, dies Name Das Attribut wird verwendet, um die Spinne aus dem Terminal zu beschwören. Wenn Sie sich erinnern, haben wir das geleitet Scrawy Crawl -Probe Befehl, unseren Code auszuführen.
start_urls = [Wir haben auch eine Liste von URLs, die die Spinne besuchen kann. Die Liste muss aufgerufen werden start_urls. Wenn Sie der Liste einen anderen Namen geben möchten, müssten wir a definieren start_requests Funktion, die uns mehr Funktionen gibt. Um mehr zu erfahren, können Sie sich die Scrapy -Dokumentation ansehen.
Vergessen Sie nicht, die http: // oder https: // für Ihre Links einzuschließen.
Def Parse (Selbst, Antwort):Wir deklarieren dann eine Parse -Funktion und geben ihr einen Antwortparameter. Wenn der Code ausgeführt wird, wird die Parse -Funktion evoziert und das Antwortobjekt wird gesendet, in dem alle Informationen der besuchten Webseite enthält.
Page_Number = Antwort.URL.split ('/') [-1]Was wir mit diesem Code gemacht haben, ist, die Zeichenfolge zu teilen, die die Adresse enthält und die Seitennummer allein in a speichert Seitennummer Variable. Dann erstellen wir eine Dateinamen Variable, die das Einfügen des Seitennummer In der Zeichenfolge, die der Dateiname der Dateien wäre, die wir erstellen würden.
mit öffnen (Datei_Name, 'WB') als Datei:Wir haben jetzt die Datei erstellt und schreiben den Inhalt der Webseite mit der Datei in die Datei Körper Attribut der Antwort Objekt.
Wir können mehr tun als nur die Webseite zu speichern. Die schöne Bibliothek kann verwendet werden, um die zu analysieren Körper.Antwort. Sie können sich dieses Beautiulsoup -Tutorial ansehen, wenn Sie mit der Bibliothek nicht vertraut sind.
Von der zu verschrotteten Seite ist hier ein Auszug des HTML, der die benötigten Daten enthält:
Afghanistan | Alandinseln |
Sie würden feststellen, dass alle erforderlichen Daten in Div -Tags eingeschlossen sind, sodass wir den Code umschreiben werden, um die HTML zu analysieren.
Hier ist unser neues Skript:
Der Code entspricht so gut wie der anfängliche.
Schauen wir uns die Logik kurz an.
Def Parse (Selbst, Antwort):Hier haben wir die Parse -Funktion definiert und ihm einen Antwortparameter gegeben.
Page_Number = Antwort.URL.split ('/') [-1]Dies tut dasselbe wie im Intial -Code beschrieben. Der einzige Unterschied besteht darin, dass wir mit einer Textdatei anstelle einer HTML -Datei arbeiten. Wir würden die abgekratzten Daten in der Textdatei speichern und nicht den gesamten Webinhalt in HTML wie zuvor.
html_content = BeautifulSoup (Antwort.Körper, "lxml")Was wir in dieser Codezeile getan haben, ist, die einzusenden Antwort.Körper Als Argument für die BeautifulSoup -Bibliothek und die Ergebnisse der Ergebnisse zugewiesen html_content Variable.
div_tags = html_content.find ("div", "id": "resultation")Wenn wir den HTML -Inhalt nehmen, analysieren wir sie hier, indem wir nach einem suchen div Tag, das auch hat und Ausweis Attribut mit Ergebnisse Da es Wert ist, können wir es in einem speichern div_tags Variable.
Country_Tags = div_tags.find_all ("div")Denken Sie daran, dass die Länder in existierten div Tags auch, jetzt bekommen wir einfach alle die div Tags und speichern sie als Liste in der Country_Tags Variable.
Country_Name_Position = ZIP (Bereich (len (Country_Tags)), Country_Tags)Hier durch die Position der Länder unter allen Länder -Tags iteriert, speichern wir den Inhalt in einer Textdatei.
In Ihrer Textdatei hätten Sie also so etwas wie:
Land Nummer 1: AfghanistanScrapy ist zweifellos eine der leistungsstärksten Bibliotheken da draußen, es ist sehr schnell und lädt die Webseite im Grunde genommen herunter. Es gibt Ihnen dann die Freiheit für alles, was Sie mit dem Webinhalt wünschen.
Wir sollten beachten, dass Scrapy viel mehr tun kann, als wir hier nachgegeben haben. Sie können Daten mit Scrapy CSS oder XPath -Selektoren analysieren, wenn Sie dies wünschen. Sie können die Dokumentation lesen, wenn Sie etwas Komplexeres tun müssen.