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.
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
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