downloader middleware(下载中间件)的认识

下载中间件相对于spider middleware显得作用更大些,在实际中使用也更加频繁,比如动态设置代理ip,请求头等

一、关于downloader middleware的认识

  • 1、继续参考第八章第二节的图中分析,下载中间件是介于spiderrequest/respone处理的钩子框架,是用于全局修改scrapyrequestrespone,更好的帮助我们定制爬虫。
  • 2、使用过程中同样需要在settings.py中的DOWNLOADER_MIDDLEWARES注册激活
  • 3、关于scrapy中内置的downloader middleware(直接看源码,有点多就不直接引入)

    下载中间件

二、下载中间件中几个重要方法

  • 1、下载器中间件主要核心的方法有(只要实现一个或者多个的类就可以叫下载中间件)

    • process_request(self, request, spider)
    • process_response(self, request, respone, spider)
    • process_exception(self, request, exception, spider)
    • from_crawler(cls, crawler)(本来不属于这边的,只是我们需要从settings.py中获取配置信息)
  • 2、process_request(self, request, spider)方法

    参数:

    • request:发送请求的request对象
    • spider:发送请求的spider对象

    返回值:

    • Node:如果返回的是None,scrapy将执行其他的下载中间件继续处理request,
    • Response:如果返回是Response,scrapy将不会调用任何其他的process_request方法,直接返回respone,且会在已经激活的中间件中的process_response中继续调用
    • Request:如果返回是Request不再使用之前request对象去下载数据,而是根据现在返回的request对象返回request对象返回数据
    • 如果是抛出异常就会执行process_exception方法
  • 3、process_response(self, request, respone, spider)方法 参数:

    • request:request对象
    • respone:被处理的respone对象
    • spider: spider对象

    返回值

    • 返回response对象:会将这个新的respone对象传给其它的中间件,最终传给爬虫
    • 返回request对象,下载器链(对个下载器串行)就会被切断,返回的request会重新被下载器调度下载
    • 如果是抛出异常就会执行process_exception方法
  • 4、process_exception(self, request, exception, spider)方法 参数:

    • request:产生异常的request对象
    • exception: 异常
    • spider: spider对象

    返回值:

    • None:scrapy将会继续执行别的下载中间件
    • 如果返回Response对象时,那么已经激活的process_response方法会继续执行
    • 如果返回Request对象时,那么request将会重新调用下载

results matching ""

    No results matching ""