Scrapy中的Spider Middleware

(一)Spider Middleware作用

  1. Downloader生成的Response发送给Spider之前
  2. Spider生成的Request发送给Scheduler之前
  3. Spider生成的Item发送给ItemPipeline之前

(二)核心方法

  • process_spider_input(response,spider)
  • process_spider_output(response,result,spider)
  • process_spider_exception(response,exception,spider)
  • process_start_requests(start_requets,spider)
    只需要实现其中一个或多个方法就可以定义一个Spider Middleware

1.process_spider_input

当Response被Spider Middleware调用处理时,process_spider_input被调用
process_spider_input 应该返回None或者抛出一个异常

  • 返回None时:
    Scrapy会继续处理Response,调用其他所有的Spider Middleware,直到spider处理该Response
  • 抛出异常时:
    Scrapy将不会调用任何其他Spider Middleware的process_spider_input方法,而调用Request的errback方法。errback的输出将会被重新输入到中间件中,使用process_spider_output方法来处理,当其抛出异常时则调用process_spider_exception来处理

2.process_spider_output

当Spider处理Response返回结果时,process_spider_output会被调用
process_spider_output方法必须返回包含Request或Item的可迭代对象

3.process_spider_exception

当Spider或Spider Middleware的process_spider_input方法抛出异常时process_spider_exception会被调用
方法必须返回None或者返回一个包含Request或者Item的可迭代对象

  • 返回None时:
    Scrapy继续处理该异常,调用其他Spider Middleware的process_spider_exception方法,直到所有Spider Middleware被调用
  • 返回可迭代对象时:
    调用其他Spider Middleware的process_spider_output方法

4.process_start_requests

process_start_requests方法以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output,只不过他没有相关联的Response,并且必须返回一个包含Request的可迭代对象。

猜你喜欢

转载自blog.csdn.net/Tony10010/article/details/87894123
今日推荐