2013-04-09 61 views
0

我從OffsiteMiddleware創建了我的自定義SpiderMiddleware。從原始類簡單複製和粘貼,也許存在一個更好的方法。如何從自定義蜘蛛中間件返回項目

我會收集過濾的異地域。 我的管道工程。

但我不知道如何將項目返回到我的管道。

感謝您的幫助。

def process_spider_output(self, response, result, spider): 
    items = [] 
    for x in result: 
     if isinstance(x, Request): 
      if x.dont_filter or self.should_follow(x, spider): 
       yield x 
      else: 
       domain = urlparse_cached(x).hostname 
       if domain and domain not in self.domains_seen[spider]: 
        self.domains_seen[spider].add(domain) 
        # ***My items ===> items.append(OutboundsLinks(url = domain))*** 
     else: 
      yield x 

回答

1

process_spider_output()必須返回一個可迭代的Request或Item對象。

def process_spider_output(self, response, result, spider): 
    items = [] 
    for x in result: 
     if isinstance(x, Request): 
      if x.dont_filter or self.should_follow(x, spider): 
       yield x 
      else: 
       domain = urlparse_cached(x).hostname 
       if domain and domain not in self.domains_seen[spider]: 
        self.domains_seen[spider].add(domain) 
        # create an item here and yield it 
     else: 
      yield x 
+0

嗨,它的工作感謝您的幫助。我只產生一個BaseItem,而不是像我的代碼中的列表。我是Python的noob,我不明白差異回報vs yield.Is有比我的代碼更好的解決方案,爲同樣的結果? – HippyZ 2013-04-10 17:10:50