爬虫在频繁访问一个页面时,这个请求头如果一直保持一致,那么有极大可能被服务器发现,从而禁止这个请求头的访问,因此我们要在我们要在访问这个页面之前随机地更换请求头,这样才可以避免爬虫被抓。
随机更换请求头,可以在下载中间件中实现,在请求发送给服务器之前,随机的选择一个请求头,这样就可以避免总使用一个请求头,有效的降低了被发现的风险
更换ueragent的方法有多种,这里采用的是学长要求的在middlewares.py中进行更换。代码如下:
1.首先在settings.py中设置用于更换的user-agent,这是我在网上找到的一些user-agent,放入USER_AGENT_LIST中
USER_AGENT_LIST=[
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
]
2.在middlewares.py中写一个用于随机更换的类class,同时引入上面设置的的USER_AGENT_LIST模块,代码如下
import random
from 所在的目录名.settings import USER_AGENT_LIST
class RandomUserAgentMiddleware(object):
def process_request(self,request,spider):
rand_use = random.choice(USER_AGENT_LIST)
if rand_use:
request.headers.setdefault('User-Agent',rand_use)
图片示例
3.回到settings.py中,找到DOWNLOADER_MIDDLEWARES并在其中写入 ’所在的目录名.middlewares.RandomUserAgentMiddleware‘:400
同时写入 ‘scrapy.downloadermiddlewares.useragent.UserAgentMiddlewares’:None,用于屏蔽scrapy默认使用的UserAgentMiddlewares。代码如下
DOWNLOADER_MIDDLEWARES = {
'所在的目录名.middlewares.RandomUserAgentMiddleware':400,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddlewares':None,
'所在的目录名.middlewares.DouluodaluDownloaderMiddleware': 543
图片示例
这样就完成了设置useragent的随机更换功能
来源:CSDN
作者:DXSNB
链接:https://blog.csdn.net/DXSNB/article/details/104398767