爬虫(自学)之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/版本号
本文来自博客园,作者:手可摘星辰/*,转载请注明原文链接:https://www.cnblogs.com/u-damowang1/p/12275030.html