Si vous augmentez le nombre de cibles de scraping (fichiers spider) dans Scrapy, le code de traitement du pipeline augmentera dans le même fichier, ce qui entraînera une mauvaise visibilité et des problèmes de maintenabilité. Je suis venu. En fin de compte, j'ai pu séparer le fichier d'implémentation du pipeline pour chaque spider, je vais donc vous présenter la méthode.
Il existe un fichier de paramètres appelé setting.py
dans le projet Scrapy.
Même s'il y a un élément de réglage de ʻITEM_PIPELINES dans
setting.py` et qu'il y a plusieurs araignées
Au départ, je pensais que je n'avais pas d'autre choix que d'agréger le traitement du pipeline en classes dans le fichier d'implémentation unique spécifié ici.
setting.py
ITEM_PIPELINES = {
'example_project.pipelines.DBPipeline': 100,
}
--Modèle pour le traitement et la ramification avec le nom de siper
J'étais en route avec le nom de l'araignée comme clé, mais il est clair que la visibilité du code s'aggrave à mesure que l'araignée augmente.
pipelines.py
class DBPipeline(object):
def process_item(self, item, spider):
if spider.name in ['example_spider']:
# example_Traitement du pipeline Spider
if spider.name in ['example_spider2']:
# example_Traitement du pipeline Spider2
Si vous définissez l'élément ʻITEM_PIPELINESdans
custom_settings` pour chaque araignée comme indiqué ci-dessous,
Le fichier d'implémentation pour le traitement du pipeline peut être individualisé. [^ 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,
}
}
Routé individuellement vers le traitement de pipeline suivant comme défini dans custom_settings
.
example_pipelines.py
class ValidationPipeline(object):
def process_item(self, item: scrapy.Item, spider: scrapy.Spider):
# example_spider.Traité lors de l'exécution de py
class DBPipeline(object):
def process_item(self, item: scrapy.Item, spider: scrapy.Spider):
# example_spider.Traité lors de l'exécution de py
example_pipelines2.py
class DBPipeline(object):
def process_item(self, item: scrapy.Item, spider: scrapy.Spider):
# example_spider2.Traité lors de l'exécution de py
Avec ce qui précède, même si le nombre de cibles de grattage (spiders) augmente, la visibilité du code de traitement du pipeline peut être maintenue en bon état.
[^ 1]: De même, il semble que vous puissiez personnaliser d'autres éléments tels que SPIDER_MIDDLEWARES
.
Recommended Posts