zoukankan      html  css  js  c++  java
  • 爬虫(自学)之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/版本号
  • 相关阅读:
    java基础第十七篇之网络编程和装饰者模式
    垃圾回收的常见算法
    java基础第十六篇之多线程
    java基础第十五篇之IO流和递归算法
    JVM史上最全实践优化没有之一
    java基础第十三篇之Collection
    java基础第十四篇之Map
    CDN加速静态文件访问
    java基础第十二篇之集合、增强for循环、迭代器和泛型
    Linux--RPM卸载安装
  • 原文地址:https://www.cnblogs.com/u-damowang1/p/12275030.html
Copyright © 2011-2022 走看看