什么是中间件 c#中间件是什么意思
时间:2023-05-03 07:20/span>
作者:tiger
分类:
新知
浏览:4496
评论:0
中间件
- 作用:批量拦截请求和响应
- 爬虫中间件
- 下载中间件(推荐)
作用:
拦截请求:
1.篡改请求url
2.伪装请求头信息(UA,Cookie)
3.设置代理(重点)
拦截响应:篡改响应数据
详解:
我们创建个工程middlePro,爬取百度和搜狗。
import scrapy
class MiddleSpider(scrapy.Spider):
name = &39;middle&39;
allowed_domains = [&39;www.xxx.com&39;]
start_urls = [&39;http://www.baiduu.com/origin/&39;, &39;http://www.sogou.com&39;]
def parse(self, response):
print(response)
然后我们看下中间件这个文件middlewares.py
middlewares.py
这里我们不需要爬虫中间件,把它删除。主要看下载中间件里的内容:
下载中间件MiddleproDownloaderMiddleware中也有一个不需要的方法和注释,删除掉,只需留下下面三个需要重写的方法:
重写方法
拦截所有(正常&异常)的请求
参数:request就是拦截到的请求,spider就是爬虫类实例化的对象
def process_request(self, request, spider):
return None
拦截所有的响应对象
参数:respone拦截到的响应对象,request响应对象对应的请求对象
def process_response(self, request, response, spider):
return response
拦截异常的请求
参数:request就是拦截到的发生异常的请求
作用:想要将异常的请求进行修正,将其变成正常的请求,然后对其进行重新发送
def process_exception(self, request, exception, spider):
pass
打印之前,需要在配置文件settings.py中设置中间件:
打开下载中间件
DOWNLOADER_MIDDLEWARES = {
&39;middlePro.middlewares.MiddleproDownloaderMiddleware&39;: 543,
}
settings.py中设置中间件
管道也打开。但这里先不设置UA和ROBOTSTXT_OBEY = True。
运行下:
我们看到网页被请求中间件和响应中间件正常拦截了(不然不会打印)。其中搜狗没有异常拦截,百度有异常拦截。
我们设置ROBOTSTXT_OBEY = False,再去运行下:
这时,因为我们忽略了robots协议,就都没有异常拦截了
举例:
process_exception:
代理的话,需要写在process_exception方法中
def process_exception(self, request, exception, spider):
请求的ip被禁掉,该请求就会变成一个异常单 请求
request.meta[&39;proxy&39;]=&39;http://ip:port&39; 设置代理
print(&39;process_exception()&39;)
return request 将异常单 请求修正后将其进行重新发送process_response:
process_response:
def process_response(self, request, response, spider):
print(&39;process_response()&39;)
请求头伪装,一般不用,只是举例
request.headers[&39;User-Agent&39;]=&39;xxx&39;
request.headers[&39;Cookie&39;] = &39;xxx&39;
return response
关注Python涛哥!学习更多Python知识!