如何从自定义蜘蛛中间件返回项目

时间:2013-04-09 12:02:30

标签: python scrapy middleware

我已经从OffsiteMiddleware创建了我的Custom 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 个答案:

答案 0 :(得分: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