kratzig

Web-Scraping mit dem Python-Scrapy-Modul

Web-Scraping mit dem Python-Scrapy-Modul
Die Fähigkeit des Web-Scrapings ist heute Gold wert. Lassen Sie uns also lernen, wie wir die benötigten Daten von Webseiten erhalten können. In diesem Artikel würden wir über die Scrapy Python-Bibliothek sprechen, was sie kann und wie man sie verwendet. Lass uns anfangen.

Warum Scrapy?

Scrapy ist eine robuste Web-Scraping-Bibliothek, mit der Sie Webseiten, Bilder und alle nur erdenklichen Daten blitzschnell herunterladen können. Geschwindigkeit ist bei der Berechnung von großer Bedeutung, und Scrapy arbeitet daran, indem es Websites asynchron besucht und viel Hintergrundarbeit leistet, damit die ganze Aufgabe einfach aussieht.

Es sollte gesagt werden, dass Python andere Bibliotheken hat, die zum Scrapen von Daten von Websites verwendet werden können, aber keine ist in Bezug auf die Effizienz mit Scrapy vergleichbar.

Installation

Lassen Sie uns einen kurzen Blick darauf werfen, 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 Scrapy

Sie können überprüfen, ob die Installation erfolgreich war, indem Sie Scrapy in die interaktive Shell von Python importieren.

$python
Python 3.5.2 (Standard, 14.09.2017, 22:51:06)
[GCC 5.4.0 20160609] unter Linux

Geben Sie „Hilfe“, „Copyright“, „Credits“ oder „Lizenz“ ein, um weitere Informationen zu erhalten.

>>> Scrapy importieren

Nun, da wir mit der Installation fertig sind, kommen wir zur Sache.

Erstellen eines Web-Scraping-Projekts

Während der Installation wurde dem Pfad das Schlüsselwort Scrapy hinzugefügt, damit wir das Schlüsselwort direkt von der Befehlszeile aus verwenden können. Wir würden dies während unserer gesamten Nutzung der Bibliothek nutzen.

Führen Sie im Verzeichnis Ihrer Wahl den folgenden Befehl aus:

kratziger Startprojekt-Webscraper

Dies würde ein Verzeichnis namens . erstellen Webscraper im aktuellen Verzeichnis und Scrapy.cfg-Datei. In dem Webscraper  Verzeichnis hätte __drin__.py, Artikel.py, Middleware.py, Pipelines.py, Einstellungen.py Dateien und ein Verzeichnis namens Spinnen.

Unsere Spinnendateien sind.e. das Skript, das das Webscraping für uns durchführt, würde im Spinnen Verzeichnis.

Schreiben unserer 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 Beispielwebscraping-Website: http://example.Webscraping.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.Webscraping.com/places/default/index/0
http://Beispiel.Webscraping.com/places/default/index/1
http://Beispiel.Webscraping.com/places/default/index/2

Zurück zu unserer Spinne, wir werden eine sample_spider erstellen.py im Spiders-Verzeichnis. Vom Terminal aus ist ein einfaches touch sample_spinne.py Befehl würde helfen, eine neue Datei zu erstellen.

Nachdem wir die Datei erstellt haben, würden wir sie mit den folgenden Codezeilen füllen:

Scrapy importieren
 
Klasse SampleSpider(scrapy.Spinne):
name = "Muster"
start_urls = [
"http://Beispiel.Webscraping.com/places/default/index/0",
"http://Beispiel.Webscraping.com/places/default/index/1",
"http://Beispiel.Webscraping.com/places/default/index/2"
]
 
def parse(selbst, antwort):
Seitennummer = Antwort.URL.split('/')[-1]
file_name = "Seite.html".format(Seitennummer)
mit open(file_name, 'wb') als Datei:
Datei.schreiben (Antwort).Körper)

Führen Sie auf der obersten Ebene des Projektverzeichnisses den folgenden Befehl aus:

Scrapy Crawl Probe

Denken Sie daran, dass wir unsere SampleSpider Klasse a Name Attribut Stichprobe.

Nachdem Sie diesen Befehl ausgeführt haben, werden Sie feststellen, dass drei Dateien namens page0.html, Seite1.html, Seite2.html werden im Verzeichnis gespeichert.

Schauen wir uns an, was mit dem Code passiert:

Scrapy importieren

Zuerst importieren wir die Bibliothek in unseren Namensraum.

Klasse SampleSpider(scrapy.Spinne):
name = "Muster"

Dann erstellen wir eine Spinnenklasse, die wir nennen SampleSpider. Unsere Spinne erbt von kratzig.Spinne. Alle unsere Spinnen müssen von Scrapy erben.Spinne. Nachdem wir die Klasse erstellt haben, geben wir unserer Spinne a Name Attribut, das Name Attribut wird verwendet, um die Spinne aus dem Terminal zu beschwören. Wenn Sie sich erinnern, haben wir die Scrapy Crawl Probe Befehl zum Ausführen unseres Codes.

start_urls = [
 
"http://Beispiel.Webscraping.com/places/default/index/0",
"http://Beispiel.Webscraping.com/places/default/index/1",
"http://Beispiel.Webscraping.com/places/default/index/2"
]

Wir haben auch eine Liste mit URLs, die die Spinne besuchen kann. Die Liste muss aufgerufen werden start_urls. Wenn Sie der Liste einen anderen Namen geben möchten, müssen wir a start_requests Funktion, die uns einige mehr Möglichkeiten gibt. Um mehr zu erfahren, können Sie sich die Scrapy-Dokumentation ansehen.

Vergessen Sie auf jeden Fall nicht, http:// oder https:// für Ihre Links anzugeben, sonst müssten Sie sich mit einem fehlenden Schemafehler befassen.

def parse(selbst, antwort):

Dann deklarieren wir eine Parse-Funktion und geben ihr einen Antwortparameter. Wenn der Code ausgeführt wird, wird die Parse-Funktion aufgerufen und das Antwortobjekt gesendet, das alle Informationen der besuchten Webseite enthält.

Seitennummer = Antwort.URL.split('/')[-1]
file_name = "Seite.html".format(Seitennummer)

Was wir mit diesem Code gemacht haben, ist, den String mit der Adresse aufzuteilen und nur die Seitennummer in a . zu speichern Seitennummer Variable. Dann erstellen wir a Dateiname Variable Einfügen der Seitennummer in der Zeichenfolge wäre das der Dateiname der Dateien, die wir erstellen würden.

mit open(file_name, 'wb') als Datei:
Datei.schreiben (Antwort).Körper)

Wir haben nun die Datei erstellt und schreiben den Inhalt der Webseite in die Datei mit dem Körper Attribut des Antwort Objekt.

Wir können mehr als nur die Webseite speichern. Die BeautifulSoup-Bibliothek kann verwendet werden, um die Körper.Antwort. Sie können sich dieses BeautiulSoup-Tutorial ansehen, wenn Sie mit der Bibliothek nicht vertraut sind.

Von der zu verschrottenden Seite ist hier ein Auszug des HTML-Codes, der die von uns benötigten Daten enthält:

Sie werden feststellen, dass alle benötigten Daten in div-Tags eingeschlossen sind, daher werden wir den Code neu schreiben, um den HTML-Code zu analysieren.
Hier ist unser neues Skript:

Scrapy importieren
aus bs4 importieren BeautifulSoup
 
Klasse SampleSpider(scrapy.Spinne):
name = "Muster"
 
start_urls = [
"http://Beispiel.Webscraping.com/places/default/index/0",
"http://Beispiel.Webscraping.com/places/default/index/1",
"http://Beispiel.Webscraping.com/places/default/index/2"
]
 
def parse(selbst, antwort):
Seitennummer = Antwort.URL.split('/')[-1]
file_name = "Seite.TXT".format(Seitennummer)
mit open(file_name, 'w') als Datei:
html_content = BeautifulSoup(Antwort.Körper, "lxml")
div_tags = html_content.find("div", "id": "results")
country_tags = div_tags.find_all("div")
country_name_position = zip(range(len(country_tags)), country_tags)
für Position, country_name in country_name_position:
Datei.write("Landesnummer : \n".format(position + 1, country_name.Text))

Der Code ist ziemlich derselbe wie der ursprüngliche, aber ich habe BeautifulSoup zu unserem Namespace hinzugefügt und die Logik in der Parse-Funktion geändert changed.

Werfen wir einen kurzen Blick auf die Logik.

def parse(selbst, antwort):

Hier haben wir die Parse-Funktion definiert und ihr einen Antwortparameter gegeben.

Seitennummer = Antwort.URL.split('/')[-1]
file_name = "Seite.TXT".format(Seitennummer)
mit open(file_name, 'w') als Datei:

Dies macht dasselbe wie im Initialcode besprochen, der einzige Unterschied besteht darin, dass wir mit einer Textdatei anstelle einer HTML-Datei arbeiten. Wir würden die geschabten Daten in der Textdatei speichern und nicht den gesamten Webinhalt wie zuvor in HTML.

html_content = BeautifulSoup(Antwort.Körper, "lxml")

Was wir in dieser Codezeile getan haben, ist das Einsenden der Antwort.Körper als Argument an die BeautifulSoup-Bibliothek und ordnete die Ergebnisse dem html_inhalt Variable.

div_tags = html_content.find("div", "id": "results")

Wir nehmen den HTML-Inhalt und analysieren ihn hier, indem wir nach a . suchen div Tag, das auch hat und Ich würde Attribut mit Ergebnisse Da es einen Wert hat, können wir es in a speichern div_tags Variable.

country_tags = div_tags.find_all("div")

Denken Sie daran, dass die Länder existierten in div Tags auch, jetzt bekommen wir einfach alle all div Tags und speichern Sie sie als Liste im country_tags Variable.

country_name_position = zip(range(len(country_tags)), country_tags)
 
für Position, country_name in country_name_position:
Datei.write("Landesnummer : \n".format(position + 1, country_name.Text))

Hier iterieren wir die Position der Länder unter allen Länder-Tags und speichern dann den Inhalt in einer Textdatei.

In Ihrer Textdatei hätten Sie also etwas wie:

Ländernummer 1: Afghanistan
Ländernummer 2: land-Inseln
Ländernummer 3:  Albanien

Fazit

Scrapy ist zweifellos eine der leistungsstärksten Bibliotheken auf dem Markt, sie ist sehr schnell und lädt im Grunde die Webseite herunter. Es gibt Ihnen dann die Freiheit, mit den Webinhalten zu tun, was Sie wollen.

Wir sollten beachten, dass Scrapy viel mehr kann, als wir hier getestet haben. Sie können Daten mit Scrapy CSS- oder XPath-Selektoren analysieren, wenn Sie möchten. Sie können die Dokumentation nachlesen, wenn Sie etwas komplexeres tun müssen.

Installieren Sie das neueste OpenRA-Strategiespiel auf Ubuntu Linux
OpenRA ist eine Libre/Free Real Time Strategy Game Engine, die die frühen Westwood-Spiele wie den Klassiker Command & Conquer: Red Alert Red nachbilde...
Installieren Sie den neuesten Dolphin Emulator für Gamecube & Wii unter Linux
Mit dem Dolphin Emulator können Sie Ihre ausgewählten Gamecube- und Wii-Spiele auf Linux-Personalcomputern (PC) spielen. Als frei verfügbarer Open-So...
So verwenden Sie die GameConqueror-Cheat-Engine unter Linux
Der Artikel enthält eine Anleitung zur Verwendung der GameConqueror-Cheat-Engine unter Linux. Viele Benutzer, die Spiele unter Windows spielen, verwen...