Другие решения, приведенные здесь, хороши, но я думаю, что они могут быть медленными, потому что мы на самом деле не используем конвейер на паука, вместо этого мы проверяем, существует ли конвейер каждый раз, когда элемент возвращается (а в некоторых случаях это может достигать миллионов).
Хороший способ полностью отключить (или включить) функцию для каждого паука - использовать custom_setting
и from_crawler
для всех расширений, таких как:
pipelines.py
from scrapy.exceptions import NotConfigured
class SomePipeline(object):
def __init__(self):
pass
@classmethod
def from_crawler(cls, crawler):
if not crawler.settings.getbool('SOMEPIPELINE_ENABLED'):
# if this isn't specified in settings, the pipeline will be completely disabled
raise NotConfigured
return cls()
def process_item(self, item, spider):
# change my item
return item
settings.py
ITEM_PIPELINES = {
'myproject.pipelines.SomePipeline': 300,
}
SOMEPIPELINE_ENABLED = True # you could have the pipeline enabled by default
spider1.py
class Spider1(Spider):
name = 'spider1'
start_urls = ["http://example.com"]
custom_settings = {
'SOMEPIPELINE_ENABLED': False
}
Когда вы проверяете, мы указали custom_settings
, который будет переопределять вещи, указанные в settings.py
, и мы отключаем SOMEPIPELINE_ENABLED
для этого паука.
Теперь, когда вы запустите этого паука, проверьте что-то вроде:
[scrapy] INFO: Enabled item pipelines: []
Теперь скрап полностью отключил трубопровод, не беспокоясь о его существовании на протяжении всего пробега. Проверьте, что это также работает для scrapy extensions
и middlewares
.