• 爬虫(自学)之User Agent 第三方库my_fake_useragent 和 fake_useragent


    • my_fake_useragent 和 fake_useragent实质基本一致,可以调用里面的方法User Agent
      •   例my_fake_useragent 底层
    class UserAgent():
        parsed_json_data = load_parsed_json_data()
    
        def __init__(self,
                     family=None,
                     os_family=None,
                     phone=None,
                     version_range=None,
                     ):
            """
    
            :param mode: default mode
            :param family: 不设置则不管 指定浏览器类型
            :param os_family: 不设置则不管 指定操作系统
            :param phone: 指定是否是手机端 True 是 False 不是 不设置默认None则不管
            :param version_range: 不设置则不管 指定浏览器版本范围
    
            手机检测 根据设备family参数之外 操作系统检测到 android 或 ios 也认为是移动端
    
            """
    
            if isinstance(family, str):
                family = family.lower()
                self.family = [family]
            elif isinstance(family, (list, tuple)):
                self.family = [f.lower() for f in family]
            elif family is None:
                self.family = None
            else:
                raise ValueError('family')
    
            if isinstance(os_family, str):
                os_family = os_family.lower()
                self.os_family = [os_family]
            elif isinstance(os_family, (list, tuple)):
                self.os_family = [f.lower() for f in os_family]
            elif os_family is None:
                self.os_family = None
            else:
                raise ValueError('os_family')
    
            self.phone = phone
            if self.phone not in [None, True, False]:
                raise ValueError('phone')
    
            self.version_range = version_range
    
            self.filter_func = build_stream_function(filter_family,
                                                     filter_os_family, filter_phone,
                                                     filter_version_range)
    
        def random(self):
            user_agent_list = self.get_useragent_list()
    
            if user_agent_list:
                return random.choice(user_agent_list)
            else:
                raise Exception('empty result')
    
        def get_useragent_list(self):
            origin_data = []
            for key in self.parsed_json_data:
                origin_data += self.parsed_json_data[key]
    
            d = {
                'data': origin_data,
                'family': self.family,
                'version_range': self.version_range,
                'os_family': self.os_family,
                'phone': self.phone
            }
    
            d = self.filter_func(d)
    
            ua_string_list = [i['string'] for i in d['data']]
            return ua_string_list
    
        def test_possible_family(self):
            t1 = set()
            for k, v in self.parsed_json_data.items():
                for i in v:
                    t1.add(i['user_agent']['family'])
            return t1
    
        def test_possible_os_family(self):
            t1 = set()
            for k, v in self.parsed_json_data.items():
                for i in v:
                    t1.add(i['os']['family'])
            return t1
    
        def test_possible_device_family(self):
            t1 = set()
            for k, v in self.parsed_json_data.items():
                for i in v:
                    t1.add(i['device']['family'])
            return t1
    •   调用方法

    • 转自百度百科判定
    一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。
    浏览器的 UA 字串
    标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息
    浏览器标识
    由于很多网站在进行 UA 检测的时候忽略了两位数版本号,所以可能造成 浏览器及之后版本收到糟糕的页面,因此自 浏览器 10 之后的版本中浏览器标识项固定为 浏览器,在 UA 字串尾部添加真实版本信息。
    操作系统标识
    FreeBSD
    X11; FreeBSD (version no.) i386
    X11; FreeBSD (version no.) AMD64
    Linux
    X11; Linux ppc
    X11; Linux ppc64
    X11; Linux i686
    X11; Linux x86_64
    Mac
    Macintosh; PPC Mac OS X
    Macintosh; Intel Mac OS X
    Solaris
    X11; SunOS i86pc
    X11; SunOS sun4u
    Windows:
    Windows NT 10.0 对应操作系统windows 10
    windows NT 6.2 对应操作系统 windows 8
    Windows NT 6.1 对应操作系统 windows 7
    Windows NT 6.0 对应操作系统 windows vista
    Windows NT 5.2 对应操作系统 windows 2003
    Windows NT 5.1 对应操作系统 windows xp
    Windows NT 5.0 对应操作系统 windows 2000
    Windows ME
    Windows 98
    加密等级标识
    N: 表示无安全加密
    I: 表示弱安全加密
    U: 表示强安全加密
    浏览器语言
    在首选项 > 常规 > 语言中指定的语言
    渲染引擎
    浏览器 使用 Presto 渲染引擎,格式为: Presto/版本号
    版本信息
    显示 浏览器 真实版本信息,格式为: Version/版本号
  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/u-damowang1/p/12275030.html
Copyright © 2020-2023  润新知