• Scrapy使用中间件捕获Spider抛出的异常


    docs

    Spider中间件启用,setting.py文件

    SPIDER_MIDDLEWARES = {
       'crawler.middlewares.CrawlerSpiderMiddleware': 543,
    }
    
    from scrapy import signals
    
    class CrawlerSpiderMiddleware(object):
        # Not all methods need to be defined. If a method is not defined,
        # scrapy acts as if the spider middleware does not modify the
        # passed objects.
    
        @classmethod
        def from_crawler(cls, crawler):
            # 这个方法被Scrapy用来创建你的爬虫
            s = cls()
            crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
            return s
    
        def process_spider_input(self, response, spider):
            # 调用通过spider中间件并进入spide的每个响应
            spider.logger.info("process_spider_input")
            # 应该返回None或者抛出异常
            return None
    
        def process_spider_output(self, response, result, spider):
            # 在处理完响应后,使用Spider返回的结果调用。
            # 必须返回请求、dict或Item对象的iterable。
            for i in result:
                yield i
    
        def process_spider_exception(self, response, exception, spider):
            # 当spider或process_spider_input()方法(来自其他spider中间件)引发异常时调用。
            spider.logger.info("process_spider_exception")
            # 应返回响应、dict或Item对象的None或iterable。
            pass
    
        def process_start_requests(self, start_requests, spider):
            # 使用spider的start请求调用,其工作方式与process_spider_output()方法类似,只是它没有关联的响应。
            spider.logger.info("process_start_requests start")
            # 必须返回请求
            for r in start_requests:
                yield r
            spider.logger.info("process_start_requests end")
    
        def spider_opened(self, spider):
            spider.logger.info('Spider opened: %s' % spider.name)
    

    注意

    process_spider_input() 每个中间件的方法将按递增的中间件顺序(100、200、300,...)
    process_spider_output() 被调用,而每个中间件的 方法将按递减的顺序调用。

  • 相关阅读:
    redux的理解
    跨域的三种解决方案
    HTTP缓存字段总结
    src属性与浏览器渲染
    ES6之promise原理
    http header Content-Type之常用三种
    用css实现正方形div
    js判断数据类型
    react中PureComponent浅对比策略
    React中自己实现选项卡动画
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/13853468.html
Copyright © 2020-2023  润新知