scrapy爬虫中的useragent(用户代理)的“随机更换”功能

如何在scrapy中使用useragent功能

使用useragent功能的原因

在平常使用爬虫时,绝大多数网站都会根据你所使用的请求头(User-Agent)来区分是否为爬虫程序,很容易拒绝我们的请求,在开始,我们会自定义一个请求头来完成我们的程序,但是,当我们用我们的爬虫程序去爬大量的网站时,使用同一个User-Agent是往往不够的,而添加多个又太过的繁琐,本文所提到useragent功能来设置随机的请求头,这样使我们的爬虫更加快捷。

用户代理功能的安装

第一步

在命令行中运行 pip install fake-useragent来下载库

第二步

根据scrapy中useragent.py中的UserAgentMiddleware类来写middlewares.py随机请求头的类
源码中的useragent.py中请求头的类

"""Set User-Agent header per spider or use a default value from settings"""
 
from scrapy import signals
 
class UserAgentMiddleware(object):
    """This middleware allows spiders to override the user_agent"""
 
    def __init__(self, user_agent='Scrapy'):
        self.user_agent = user_agent
 
    @classmethod
    def from_crawler(cls, crawler):
        o = cls(crawler.settings['USER_AGENT'])
        crawler.signals.connect(o.spider_opened, signal=signals.spider_opened)
        return o
 
    def spider_opened(self, spider):
        self.user_agent = getattr(spider, 'user_agent', self.user_agent)
 
    def process_request(self, request, spider):
        if self.user_agent:
            request.headers.setdefault(b'User-Agent', self.user_agent)

然后根据上面所提供的类在Scrapy中的middlewares.py中写入随机请求头的类

from fake_useragent import UserAgent
class RandomUserAgentMiddlware(object):
   
    def __init__(self, crawler):
        super(RandomUserAgentMiddlware, self).__init__()
        self.ua = UserAgent()
        #读取在settings文件中的配置,来决定ua采用哪个方法,默认是random,也可是ie、Firefox等等,参考前面的使用方法。
        self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random")

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)
    
    #更换用户代理逻辑在此方法中
    def process_request(self, request, spider):
        def get_ua():
            return getattr(self.ua, self.ua_type)

        print  get_ua()
        request.headers.setdefault('User-Agent', get_ua())

第三步

设置settings里面的配置

 
DOWNLOADER_MIDDLEWARES = {
 
   'ArticleSpider.middlewares.RandomUserAgentMiddlware': 543,          
    #将在middlewares.py中定义了RandomUserAgentMiddlware类添加到这里;
   'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,  
    #需要将scrapy默认的置为None不调用
}
 
RANDOM_UA_TYPE = "random"   #或者指定浏览器 firefox、chrome...

ps:一定不要忘了把原来scrapy默认的设置,设置为None
这样在每次爬虫时不用单独在每个spider中进行调用了,每次进行爬虫时,都会自己随机产生请求头

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy可以通过在settings.py文件设置USER_AGENTS列表来实现随机user-agent。在列表添加多个user-agent,Scrapy随机选择一个作为请求头user-agent。这样可以避免被网站识别为爬虫,提高爬虫的稳定性和成功率。具体设置方法如下: 1. 在settings.py文件添加USER_AGENTS列表,如下所示: ``` USER_AGENTS = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36', ] ``` 2. 在middlewares.py文件添加RandomUserAgentMiddleware间件,如下所示: ``` from scrapy import signals import random class RandomUserAgentMiddleware(object): def __init__(self, agents): self.agents = agents @classmethod def from_crawler(cls, crawler): return cls(crawler.settings.getlist('USER_AGENTS')) def process_request(self, request, spider): request.headers.setdefault('User-Agent', random.choice(self.agents)) ``` 3. 在settings.py文件启用RandomUserAgentMiddleware间件,如下所示: ``` DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.RandomUserAgentMiddleware': 543, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, } ``` 这样就完成了随机user-agent的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值