Python中SpiderMiddleware的使用方法
今天就跟大家聊聊有关Python中Spider Middleware的使用方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站建设、兰坪网络推广、重庆小程序开发、兰坪网络营销、兰坪企业策划、兰坪品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供兰坪建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
前言
大部分人的身上,有一种近乎无解的矛盾——
★想要养成早起的习惯,却一不小心刷手机到凌晨两点;
看到一篇干货文章,第一反应是加收藏夹下次再看(收藏从未停止,学习从未开始。/ 收藏==学会);
想要瘦身塑形,却在深夜破功:“吃饱了才有力气减肥”;
看到一门不错的课程,却还是告诉自己有时间了再学......
”
Spider Middleware的使用方法
Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架。
当Downloader生成Response之后,Response会被发送给Spider,在发送Spider之前,Response会首先经过Spider Middleware处理,当Spider处理生成Item和Request之后,Item和Request还会经过Spider Middleware的处理。
Spider Middleware有如下三个作用:
我们可以在Downloader生成Response发送给Spider之前,也就是Response发送给Spider之前对Response进行处理。 我们可以Spider生成Request发送给Scheduler之前,也就是Request发送给Scheduler之前对Request进行处理。 我们可以在Spider生成Item发送给Item Pipeline之前,也就是Item发送给Item Pipeline之前对Item进行处理。
使用说明
需要说明的是Scrapy其实已经提供了许多Spider Middleware,它们被SPIDER_MIDDLEWARES_BASE这个变量所定义。
SPIDER_MIDDLEWARE_BASE变量内容如下:
{
'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,
}
和Downloader Middleware一样,Spider Middleware首先加入到SPIDER_MIDDLEWARES设置当中,该设置会和Scrapy中SPIDER_MIDDLEWARES_BASE定义的Spider Middleware合并。然后根据键值的数字优先级排序,得到一个有序列表。第一个Middleware是最靠近引擎的,最后一个MIddleware是最靠近Spider的。
核心方法
Scrapy内置的Spider Middleware为Spider提供了基础功能。如果我们想要拓展其功能,只需要实现某个方法即可。
每个Spider Middleware都定义了以下一个或多个方法的类,核心方法有如下4个:
process_spider_input(response, spider) process_spider_output(response, result, spider) process_spider_exception(response, exception, spider) process_start_requests(start_requests, spider)
process_spider_input(response, spider)
当Response通过Spider Middleware时,该方法被调用,处理该Response。
方法的参数有两个:
response:即Response对象,即被处理的Response Spider:即Spider对象,即该Response对应的Spider
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()来处理。
process_spider_output(response, result, spider)
当Spider处理Response返回结果时,该方法被调用。
方法的参数有三个:
response,即Response对象,即生成该输出的Response; result,包含Request或Item对象的可迭代对象,即Spider返回的结果; spider,即Spider对象,即其结果对应的Spider。
process_spider_output()必须返回包含Request或Item对象的可迭代对象。
process_spider_exception(response, exception, spider)
当Spider或Spider Middleware的process_spider_input()方法抛出异常时,该方法被调用。
方法的参数有三个:
response,即Response对象,即异常被抛出时被处理的Response。 exception,即Exception对象,被抛出的异常。 spider,即Spider对象,即抛出异常的Spider
process_spider_exception()要么返回None,要么返回一个包含Response或Item对象的可迭代对象。
如果其返回None,Scrapy将继续处理该异常,调用其他Spider Middleware中的process_spider_exception()方法,直到所有的Spider Middleware被调用。 如果返回一个可迭代对象,则其他的Spider Middleware的process_spider_output()方法被调用,其他的process_spider_exception()将不会被调用。
process_start_requests(start_requests, spider)
该方法以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output(),只不过其他没有相关联的Response并且必须返回Request。
方法的参数有两个:
start_requests,即包含Request的可迭代对象,即Start Requests spider,即Spider对象,即Start Requests所属的Spider
其必须返回一个包含Request对象的可迭代对象。
开启Spider Middleware
每当我们创建一个新的项目的时候,就会生成一个middlewares.py
的文件,在这个文件中有一个类:MiddletestSpiderMiddleware
,这个类与我们创建的项目名相关,我创建的项目名为``Middletest`。因此,当我们修改这个项目名的时候,这个类名也要跟着修改。
在这个类中,里面就有我们上面所描述的四个核心方法。
我们要开启这个Spider Middleware,可以到settings.py里面去开启:
# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
'middletest.middlewares.MiddletestSpiderMiddleware': 543,
}
只需要取消注释即可。
看完上述内容,你们对Python中Spider Middleware的使用方法有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
分享标题:Python中SpiderMiddleware的使用方法
当前链接:http://pwwzsj.com/article/jchdgo.html