作业2,博客1

scrapy框架下实现爬虫douluo的useragent的随机更换功能

爬虫在频繁访问一个页面时,这个请求头如果一直保持一致,那么有极大可能被服务器发现,从而禁止这个请求头的访问,因此我们要在我们要在访问这个页面之前随机地更换请求头,这样才可以避免爬虫被抓

随机更换请求头,可以在下载中间件中实现,在请求发送给服务器之前,随机的选择一个请求头,这样就可以避免总使用一个请求头,有效的降低了被发现的风险

更换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的随机更换功能

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值