作业2,博客1

自作多情 提交于 2020-02-20 08:03:35
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的随机更换功能

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!