spider middleware(spider中间件)的认识
一、关于spider中间件的认识
- 1、
spider中间件是介入到scrapy的spider处理机制的钩子框架,可以用来处理发送给spider的Response及spider产生的item和request; - 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、源码地址

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方法,并调用request和errback。errback的输出将会以另一个方向被重新输入到中间链中,使用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为参数被调用