下载器中间键可以为我们设置多个代理ip与请求头,达到反反爬虫的目的
下面是scrapy为我们创建好的中间件的类
Process_request(self,request,spider)
参数request:发送请求的request对象
spider:发送请求的spider对象
此方法若返回None,Scrapy将继续处理此Request,直到 其他下载器中间件被调用
此方法若返回Response对象:不再返回下载器,直接返回给引擎
返回Request对象:使用现在返回的Request
图解
Process_response(self,request,response,spider):
参数
request: request对象response:被处理的response对象
返回值
返回response对象:会将这个对象按序传给其他中间件,最终经过引擎给到爬虫返回request对象:下载器链接切断,返回的request重新被下载器调度,最终经过引擎给到爬虫
返回request对象:下载器链接切断,返回的request重新被下载器调度
中间件应用
Scrapy设置随机请求头
基本介绍
设置随机请求头是应对反爬虫的一种手段,如果某个相同的请求头对目标网站频繁进行访问,可能会被封禁。
故此我们在爬虫的时候最好随机更改我们的请求头,我将在Scrapy的下载器中间件上进行随机更改请求头
常见备选请求头User-Agent
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
编写下载器中间件
我们选择重写我们的下载器中间件类,在middlewares.py中添加如下代码
class RandomUserAgentMiddleWare(object):
USER_AGENT_LIST = [
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0", "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" ]
def process_request(self,request,spider):
user_agent = random.choice(self.USER_AGENT_LIST)
request.heardes['User-Agent'] = user_agent
在setting.py中找到这段注释,并将蓝色部分换成我们刚写好的类
再去运行我们的爬虫,爬虫就会生成随机请求头去访问我们的目标网站
————————————————
参考链接 下载器:https://blog.csdn.net/JunSIrhl/article/details/102577470 :https://blog.csdn.net/JunSIrhl/article/details/102577470