5

我有很多图像管道,但我想为不同的蜘蛛使用不同的保存方法。

我知道在其他管道中我可以使用spider.name,但我怎样才能在图像管道中得到它

class MyImagesPipeline(ImagesPipeline):
   if spider.name  in ['first']:
    def get_media_requests(self, item, info):
4

3 回答 3

5

蜘蛛作为参数传递给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

SpiderInfo您还可以直接从基类中检索信息,该基类有一个带有蜘蛛属性的内部元类。

见:https ://github.com/scrapy/scrapy/blob/master/scrapy/contrib/pipeline/media.py

于 2013-01-03T08:30:40.303 回答
2

info.spider是你想要的。

def get_media_requests(self, item, info):
    info.spider.name
于 2017-05-29T15:00:43.853 回答
-1

虽然距离发布已经很长时间了,但我在这里提出一个解决方案。在管道内,查找名称变量:spider.name

希望对你有帮助。

于 2020-08-15T21:58:08.190 回答