Scrapy框架下载器和随机请求头

本文介绍了如何利用Scrapy的下载器中间件设置多个代理IP和随机请求头来应对反爬虫策略。通过重写`process_request`方法,随机选择User-Agent列表中的一个作为请求头,从而避免因重复请求头导致的封禁风险。同时,文章提供了多个常见的User-Agent示例供参考。在Scrapy设置中启用这个中间件,即可实现随机请求头的功能。
摘要由CSDN通过智能技术生成

下载器中间键可以为我们设置多个代理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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值