2013-01-03 3 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/)를보십시오. blob/master/scrapy/contrib/pipeline/media.py) –

0

info.spider 당신이 원하는 것입니다.

def get_media_requests(self, item, info): 
    info.spider.name 
관련 문제