2013-01-03 24 views
4

我有很多圖像管道,但我想爲不同的蜘蛛使用不同的保存方法。我怎樣才能得到在圖像管道中的蜘蛛名稱

我知道,在其它管線我可以使用spider.name,但我怎樣才能在圖像spipeline

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

你能告訴我們更多的代碼嗎?你到底需要什麼,你怎麼稱呼它? – miku

+0

我只需要檢查蜘蛛的名字,然後做點什麼。我將更新代碼 – user19140477031

回答

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

+0

imagepipeline沒有任何'process_item'方法 – user19140477031

+0

@ user19140477031是的,它從'MediaPipeline'繼承它。參見[source at github](https://github.com/scrapy/scrapy/斑點/主/ scrapy /了contrib /管線/ media.py) –

0

info.spider是你想要的。

def get_media_requests(self, item, info): 
    info.spider.name