[PYTHON] So trennen Sie den Pipeline-Verarbeitungscode mit Scrapy nach Spider

Einführung

Wenn Sie die Anzahl der Scraping-Ziele (Spider-Dateien) in Scrapy erhöhen, erhöht sich der Pipeline-Verarbeitungscode in derselben Datei, was zu Problemen bei der Sichtbarkeit und Wartbarkeit führt. Ich kam. Am Ende konnte ich die Pipeline-Implementierungsdatei für jede Spinne trennen, daher werde ich die Methode vorstellen.

Vorläufige Zielmethode

Im Scrapy-Projekt befindet sich eine Einstellungsdatei mit dem Namen "settings.py". Auch wenn es in "settings.py" ein Einstellungselement von "ITEM_PIPELINES" gibt und es mehrere Spinnen gibt Anfangs dachte ich, ich hätte keine andere Wahl, als die Pipeline-Verarbeitung in Klassen in der hier angegebenen einzelnen Implementierungsdatei zusammenzufassen.

setting.py


ITEM_PIPELINES = {
    'example_project.pipelines.DBPipeline': 100,
}

Ich habe mit dem Spinnennamen als Schlüssel geroutet, aber es ist klar, dass die Sichtbarkeit des Codes mit zunehmender Spinne schlechter wird.

pipelines.py


class DBPipeline(object):
    def process_item(self, item, spider):
        if spider.name in ['example_spider']:
            # example_Verarbeitung von Spinnenpipelines
        
        if spider.name in ['example_spider2']:
            # example_Spider2-Pipeline-Verarbeitung

Fazit

Wenn Sie das Element "ITEM_PIPELINES" in "custom_settings" für jede Spinne wie unten gezeigt festlegen, Die Implementierungsdatei für die Pipeline-Verarbeitung kann individualisiert werden. [^ 1]

example_spider.py


class ExampleSpider(scrapy.Spider):
    custom_settings = {
        'ITEM_PIPELINES': {
            'example_project.example_pipelines.ValidationPipeline': 100,
            'example_project.example_pipelines.DBPipeline': 200,
        }
    }

example_spider2.py


class ExampleSpider2(scrapy.Spider):
    custom_settings = {
        'ITEM_PIPELINES': {
            'example_project.example_pipelines2.DBPipeline': 100,
        }
    }

Individuell an die folgende Pipeline-Verarbeitung weitergeleitet, wie in "custom_settings" festgelegt.

example_pipelines.py


class ValidationPipeline(object):
    def process_item(self, item: scrapy.Item, spider: scrapy.Spider):
        # example_spider.Wird beim Ausführen von py verarbeitet

class DBPipeline(object):
    def process_item(self, item: scrapy.Item, spider: scrapy.Spider):
        # example_spider.Wird beim Ausführen von py verarbeitet

example_pipelines2.py


class DBPipeline(object):
    def process_item(self, item: scrapy.Item, spider: scrapy.Spider):
        # example_spider2.Wird beim Ausführen von py verarbeitet

Selbst wenn die Anzahl der Scraping-Ziele (Spinnen) zunimmt, kann die Sichtbarkeit des Pipeline-Verarbeitungscodes in gutem Zustand gehalten werden.

[^ 1]: Ebenso können Sie anscheinend andere Elemente wie "SPIDER_MIDDLEWARES" anpassen.

Recommended Posts

So trennen Sie den Pipeline-Verarbeitungscode mit Scrapy nach Spider
Übergeben von Einstellungen an Item Pipeline in Scrapy
So führen Sie TensorFlow 1.0-Code in 2.0 aus
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Lesen von CSV-Dateien mit Pandas
Zusammenfassung zum Importieren von Dateien in Python 3
Wie man eine kratzige JSON-Ausgabe japanisch macht
So überprüfen / extrahieren Sie Dateien im RPM-Paket
So erhalten Sie die Dateien im Ordner [Python]
[Verarbeitung natürlicher Sprache / NLP] Einfache Rückübersetzung durch maschinelle Übersetzung mit Python
So messen Sie die Verarbeitungszeit mit Python oder Java
Verwendung von Variablen in systemd Unit-Definitionsdateien
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
So listen Sie Zahlen auf, indem Sie sie in n teilen
Hochladen von Dateien in der generischen Klassenansicht von Django
So verweisen Sie auf statische Dateien in einem Django-Projekt
Vergleichen Sie, wie die Verarbeitung für Listen nach Sprache geschrieben wird
Verwendung von VS-Code in einer venv-Umgebung mit Windows
So beheben Sie mehrere Spalten, die von der Pandas-Gruppe generiert wurden, indem Sie sie zu einer einzelnen verarbeiten
Zusammenfassung zum Schreiben von in gRPC verwendeten .proto-Dateien
So suchen Sie nach einer Zeichenfolge, um json_contains von mysql in SQL Alchemy zu verwenden
So trennen Sie Zeichenfolgen mit ','
Schreiben Sie Spinnen-Tests in Scrapy
Wie man in Python entwickelt
So zeigen Sie eine bestimmte Dateispalte unter Linux an (awk)
[Für Anfänger] So implementieren Sie O'reilly-Beispielcode in Google Colab
So implementieren Sie Java-Code im Hintergrund von Red Hat (Linux ONE)
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
So kombinieren Sie alle CSVs in einem Ordner zu einer CSV
[FSL] Wie man Atlas einzeln abzieht und trennt
Debuggen eines Python-Programms durch Remoteverbindung mit einem Docker-Container in einer WSL2-Umgebung mit VS-Code
"Cython" -Tutorial, um Python explosiv zu machen: So analysieren Sie die in C ++ - Code definierte Enum-Klasse mit Enum in Python.