spider middleware(spider中间件)的认识

一、关于spider中间件的认识

  • 1、spider中间件是介入到scrapyspider处理机制的钩子框架,可以用来处理发送给spiderResponsespider产生的itemrequest;
  • 2、关于spider中间件在scrapy中的位置图请查看第八章第二小节中;
  • 3、从图中可以看书,当Downloaded middleware生成的response之后,response会被发送给spider,但是引擎和spider中间有一层spider middleware;
  • 4、spider middleware的主要作用:
    • response到达spider之前可以对response进行处理;
    • spider生成的request到调度器之前可以对request进行处理;
    • spider生成的item发送给pipeline之前对item进行处理。

二、使用方式

  • 1、必须先到settings.py中注册激活才能使用

    SPIDER_MIDDLEWARES = {
       'blog_page1.middlewares.BlogPage1SpiderMiddleware': 543,
    }
    

三、关于scrapy中内置的spider middleware

  • 1、源码地址

    spider中间件

  • 2、引包地址及配置信息

    from scrapy.spidermiddlewares.httperror import HttpErrorMiddleware
    from scrapy.spidermiddlewares.offsite import OffsiteMiddleware
    from scrapy.spidermiddlewares.referer import RefererMiddleware
    from scrapy.spidermiddlewares.urllength import UrlLengthMiddleware
    from scrapy.spidermiddlewares.depth import DepthMiddleware
    
    SPIDER_MIDDLEWARES = {
      'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
      'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500,
      'scrapy.spidermiddlewares.referer.RefererMiddleware': 700,
      'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800,
      'scrapy.spidermiddlewares.depth.DepthMiddleware': 900,
    }
    
  • 3、有兴趣的可以自己阅读下源码

四、书写spider middleware

  • 1、几个核心的方法(只要实现其中一个方法就可以称之为spider middleware)

    • process_spider_input(respone, spider)
    • process_spider_output(respone, result, spider)
    • process_spider_exception(respone, exception, spider)
    • process_start_requests(start_requests, spider)
  • 2、process_spider_input(respone, spider)

    respone通过spider中间件时候,该方法会被调用,处理respone,应当返回None或者抛出一个异常

    • 当返回None的时候,spider会继续执行别的spider middleware
    • 产生一个异常的时候scrapy就不会调用任何其他中间件的process_spider_input方法,并调用requesterrbackerrback的输出将会以另一个方向被重新输入到中间链中,使用process_spider_output方法来处理
    • 抛出一个异常的时候将会调用process_spider_exception方法
  • 3、process_spider_output方法

    spider处理respone返回result的时候触发

  • 4、process_spider_exception方法

    process_spider_input抛出异常的时候触发的

  • 5、process_start_requests方法

    该方法在spider启动request为参数被调用

results matching ""

    No results matching ""