本文主要是介绍Scrapy中的Spider Middleware,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(一)Spider Middleware作用
- Downloader生成的Response发送给Spider之前
- Spider生成的Request发送给Scheduler之前
- 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的可迭代对象。
这篇关于Scrapy中的Spider Middleware的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!