我有很多图像管道,但我想为不同的蜘蛛使用不同的保存方法.
我知道在其他管道我可以使用,spider.name
但我怎么能在图像spipeline中得到它
class MyImagesPipeline(ImagesPipeline):
if spider.name in ['first']:
def get_media_requests(self, item, info):
Run Code Online (Sandbox Code Playgroud)
蜘蛛作为参数传递给process_item
:
https://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html#item-pipeline-example
您可以在评估类广泛使用期间设置变量,或者在调用process_item之前需要蜘蛛时自己实现一个钩子.
class MyImagesPipeline(ImagesPipeline):
spider = None
def process_item(self, item, spider):
self.spider = spider
if self.spider.name in ['first']:
get_media_requests(item, info)
return item
def get_media_requests(self, item, info):
# whatever
Run Code Online (Sandbox Code Playgroud)
您还可以直接从基类检索信息,基类具有SpiderInfo
带有spider属性的内部元类.
请参阅:https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/pipeline/media.py