2013-03-11 58 views
0

有沒有什麼辦法讓我在蜘蛛中擁有持久請求元數據? request.meta只持續到下一次的回調,在那裏我必須做這樣的事情:Scrapy中的持久請求元數據

def method1(self, response): 
    request = Request(url, callback=self.method2) 
    request.meta['persist'] = ... 

    yield request 

def method2(self, response): 
    ... 

    request = Request(url, callback=self.method3) 
    request.meta['persist'] = response.meta['persist'] 

    yield request 

我也做了裝飾,做這個,但我真的希望有一個更清潔的解決方案:

def persist_meta(callback): 
    def inner(self, *args, **kwargs): 
     for result in callback(self, *args, **kwargs): 
      if isinstance(result, Request): 
       response = args[0] 

       persist = response.meta.get('persist', {}) 
       persist.update(result.meta.get('persist', {}) 

       result.meta['persist'] = persist 

      yield result 

    return inner 

任何幫助表示讚賞。

回答

1

創建一個新的middleware並將您的代碼持續存儲在process_spider_input中。