Heim >Backend-Entwicklung >Python-Tutorial >So erstellen Sie mit Scrapy ein effizientes Crawler-Programm

So erstellen Sie mit Scrapy ein effizientes Crawler-Programm

WBOY
WBOYOriginal
2023-08-02 14:33:13694Durchsuche

So erstellen Sie mit Scrapy ein effizientes Crawler-Programm

Mit dem Aufkommen des Informationszeitalters nimmt die Datenmenge im Internet weiter zu und auch die Nachfrage nach großen Datenmengen steigt. Und Crawler sind zu einer der besten Lösungen für dieses Bedürfnis geworden. Als hervorragendes Python-Crawler-Framework ist Scrapy effizient, stabil und einfach zu verwenden und wird in verschiedenen Bereichen häufig eingesetzt. In diesem Artikel wird erläutert, wie Sie mit Scrapy ein effizientes Crawler-Programm erstellen und Codebeispiele angeben.

  1. Grundstruktur des Crawler-Programms

Das Crawler-Programm von Scrapy besteht hauptsächlich aus den folgenden Komponenten:

  • Crawler-Programm: Definiert, wie Seiten gecrawlt, Daten daraus analysiert und Links gefolgt werden.
  • Projektpipeline: Verantwortlich für die Verarbeitung der vom Crawler-Programm aus der Seite extrahierten Daten und die Durchführung der anschließenden Verarbeitung, z. B. das Speichern in einer Datenbank oder das Exportieren in eine Datei usw.
  • Downloader-Middleware: Verantwortlich für die Verarbeitung von Sendeanfragen und den Erhalt von Seiteninhalten. Sie kann Vorgänge wie User-Agent-Einstellungen und Proxy-IP-Wechsel durchführen.
  • Scheduler: Verantwortlich für die Verwaltung aller abzurufenden Anfragen und deren Planung nach bestimmten Strategien.
  • Downloader: Verantwortlich für das Herunterladen des angeforderten Seiteninhalts und die Rückgabe an das Crawler-Programm.
  1. Ein Crawler-Programm schreiben

In Scrapy müssen wir ein neues Crawler-Projekt erstellen, um unser Crawler-Programm zu schreiben. Führen Sie den folgenden Befehl in der Befehlszeile aus:

scrapy startproject myspider

Dadurch wird ein Projektordner mit dem Namen „myspider“ mit einigen Standarddateien und -ordnern erstellt. Wir können in diesen Ordner gehen und einen neuen Crawler erstellen:

cd myspider
scrapy genspider example example.com

Dadurch wird ein Crawler mit dem Namen „example“ erstellt, um Daten von der Website „example.com“ zu crawlen. Wir können spezifische Crawler-Logik in die generierte Datei „example_spider.py“ schreiben.

Nachfolgend finden Sie ein einfaches Beispiel für das Scrapen von Schlagzeilen und Links auf einer Website.

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/news']

    def parse(self, response):
        for news in response.xpath('//div[@class="news-item"]'):
            yield {
                'title': news.xpath('.//h2/text()').get(),
                'link': news.xpath('.//a/@href').get(),
            }
        next_page = response.xpath('//a[@class="next-page"]/@href').get()
        if next_page:
            yield response.follow(next_page, self.parse)

Im obigen Code definieren wir eine Crawler-Klasse mit dem Namen „ExampleSpider“, die drei Attribute enthält: „name“ stellt den Namen des Crawlers dar, „allowed_domains“ stellt den Domänennamen dar, der die Website crawlen darf, und „start_urls“ stellt die Start-URL dar . Anschließend haben wir die Parse-Methode neu geschrieben, die den Inhalt der Webseite analysiert, Nachrichtentitel und Links extrahiert und die Ergebnisse mithilfe von yield zurückgibt.

  1. Projektpipeline konfigurieren

In Scrapy können wir die gecrawlten Daten durch die Projektpipeline leiten. Daten können in einer Datenbank gespeichert, in eine Datei geschrieben oder später auf andere Weise verarbeitet werden.

Öffnen Sie die Datei „settings.py“ im Projektordner, suchen Sie darin das Konfigurationselement ITEM_PIPELINES und kommentieren Sie es aus. Fügen Sie dann den folgenden Code hinzu:

ITEM_PIPELINES = {
    'myspider.pipelines.MyPipeline': 300,
}

Dadurch wird die benutzerdefinierte Pipeline-Klasse „my Spider.pipelines.MyPipeline“ aktiviert und eine Priorität angegeben (je niedriger die Zahl, desto höher die Priorität).

Als nächstes müssen wir eine Pipeline-Klasse erstellen, um die Daten zu verarbeiten. Erstellen Sie eine Datei namens „pipelines.py“ im Projektordner und fügen Sie den folgenden Code hinzu:

import json

class MyPipeline:

    def open_spider(self, spider):
        self.file = open('news.json', 'w')

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "
"
        self.file.write(line)
        return item

In diesem Beispiel definieren wir eine Pipeline-Klasse namens „MyPipeline“ mit drei Methoden: open_spider, close_spider und process_item. In der Methode open_spider öffnen wir eine Datei zum Speichern der Daten. In der Methode close_spider schließen wir die Datei. In der Methode „process_item“ konvertieren wir die Daten in das JSON-Format und schreiben sie in die Datei.

  1. Führen Sie das Crawler-Programm aus

Nachdem wir mit dem Schreiben des Crawler-Programms und der Projektpipeline fertig sind, können wir den folgenden Befehl in der Befehlszeile ausführen, um das Crawler-Programm auszuführen:

scrapy crawl example

Dadurch wird der Crawler mit dem Namen „example“ gestartet und gestartet Crawling Daten abrufen. Die gecrawlten Daten werden so verarbeitet, wie wir sie in der Pipeline-Klasse definiert haben.

Das Obige ist der grundlegende Prozess und Beispielcode für die Verwendung von Scrapy zum Erstellen eines effizienten Crawler-Programms. Natürlich bietet Scrapy auch viele weitere Features und Optionen, die je nach Bedarf angepasst und erweitert werden können. Ich hoffe, dass dieser Artikel den Lesern helfen kann, Scrapy besser zu verstehen und zu verwenden und effiziente Crawler-Programme zu erstellen.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Scrapy ein effizientes Crawler-Programm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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