zoukankan      html  css  js  c++  java
  • Python3中通过fake_useragent生成随机UserAgent

    安装和使用

    fake_useragent第三方库,来实现随机请求头的设置;

    GitHub               ---> https://github.com/hellysmile/fake-useragent

    安装                    ---> pip3 install fake-useragent

    查看useragent   ---> http://fake-useragent.herokuapp.com/browsers/0.1.5

    关键是后面的版本号,如果更新后使用原版本号就查看不到useragent;

    如何操作最新版本号?通过pip3 list 查看安装的版本号;

     使用

    复制代码
    from fake_useragent import UserAgent
    
    ua = UserAgent()
    print(ua.ie)   #随机打印ie浏览器任意版本
    print(ua.firefox) #随机打印firefox浏览器任意版本
    print(ua.chrome)  #随机打印chrome浏览器任意版本
    print(ua.random)  #随机打印任意厂家的浏览器
    复制代码

    二、应用于scrapy爬虫项目

      首先在middlewares.py中自定义随机请求头的类

      根据scrapy源码中: scrapy目录--->downloadermiddlewares--->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)
    复制代码

    middlewares.py定义随机请求头的类

    复制代码
    class RandomUserAgentMiddlware(object):
    '''随机更换user-agent,基本上都是固定格式和scrapy源码中useragetn.py中UserAgentMiddleware类中一致'''
    def __init__(self,crawler): super(RandomUserAgentMiddlware,self).__init__() self.ua = UserAgent()
    #从配置文件settings中读取RANDOM_UA_TYPE值,默认为random,可以在settings中自定义 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) 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:配置好后取消原来spider中定义的User-Agent。再次进行爬虫时,会自动携带随机生成的User-Agent,不需要在每个spider中自定义了;

     
     
     
  • 相关阅读:
    各种模板
    HNOI2019总结
    WC2019游记
    THUSC2017 Day1题解
    NOIP2018联赛总结
    LOJ2557. 「CTSC2018」组合数问题
    NOI2018游记
    bzoj4671: 异或图
    sg函数小结
    [NOI2011]Noi嘉年华
  • 原文地址:https://www.cnblogs.com/telwanggs/p/12053074.html
Copyright © 2011-2022 走看看