scrapy中间件与itempipline组件使用问题?

收藏

新版scrapy中,自定义中间件方法直接使用spider_opened,spider_closed 以及pipline中的open_spider,close_spider方法

可能出现如下图这样一个奇怪的问题

回答

MrSun回答

解决方法:

spider_opened,spider_closed,open_spider,close_spider 这几个方法本质是信号处理函数,正常来说scrapy框架已经注册过,不需要我们手动注册,如果出现上面描述的情况,那么需要我们手动注册后就可以了方法如下,实现类中的from_crawler方法

    # 中间件编写方式
    @classmethod
    def from_crawler(cls, crawler):
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        crawler.signals.connect(s.spider_closed, signal=signals.spider_closed)
        return s
    # pipline中from_crawler
    @classmethod
    def from_crawler(cls, crawler):
        pipline = cls()
        crawler.signals.connect(pipline .open_spider, signal=signals.spider_opened)
        crawler.signals.connect(pipline .close_spider, signal=signals.spider_closed)
        return pipline

 

(0)

提交成功