利用 Python-user-agents 解析 User_Agent
近期写作业需要解析浏览器 User_Agent,查了一下,发现已经有人做好了包,在这儿记录学习的内容。
安装
pip install pyyaml ua-parser user-agents
包地址:https://pypi.org/project/user-agents/
介绍:“user_agents”是一个Python库,它通过解析(浏览器/HTTP) user agent 字符串,提供了一种简单的方法,来识别/检测手机、平板等设备及其功能。目标是可靠地检测:设备是手机,平板还是电脑;是否有触摸屏。
``ua-parser <https://github.com/tobie/ua-parser>``执行对原始用户代理字符串的实际解析。
用法
各种基本信息可以帮忙识别访问者,比如设备,操作系统,浏览器等属性
from user_agents import parse# iPhone's user agent string
ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'
user_agent = parse(ua_string) # 解析成user_agent# Accessing user agent's browser attributes
user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')
user_agent.browser.family # returns 'Mobile Safari'
user_agent.browser.version # returns (5, 1)
user_agent.browser.version_string # returns '5.1'# Accessing user agent's operating system properties
user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')
user_agent.os.family # returns 'iOS'
user_agent.os.version # returns (5, 1)
user_agent.os.version_string # returns '5.1'# Accessing user agent's device properties
user_agent.device # returns Device(family=u'iPhone', brand=u'Apple', model=u'iPhone')
user_agent.device.family # returns 'iPhone'
user_agent.device.brand # returns 'Apple'
user_agent.device.model # returns 'iPhone'# Viewing a pretty string version
str(user_agent) # returns "iPhone / iOS 5.1 / Mobile Safari 5.1"
# 最后这个最好用
目前还支持这些属性:
- is_mobile:判断是不是手机
- is_tablet:判断是不是平板
- is_pc:判断是不是电脑
- is_touch_capable:有没有触屏功能
- is_bot:是不是搜索引擎的爬虫
from user_agents import parse# Let's start from an old, non touch Blackberry device
ua_string = 'BlackBerry9700/5.0.0.862 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/331 UNTRUSTED/1.0 3gpp-gba'
user_agent = parse(ua_string)
user_agent.is_mobile # returns True
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns False
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "BlackBerry 9700 / BlackBerry OS 5 / BlackBerry 9700"
常见机型映射字典
map_phone = {'Apple': 'Apple', 'KIW-AL10': 'Huawei', 'PRA-TL10': 'Huawei', 'BND-AL00': 'Huawei', 'XiaoMi': 'XiaoMi', 'MIX 2': 'XiaoMi', 'Oppo': 'Oppo', ' Oppo': 'Oppo', 'Gionee': 'Gionee', 'Samsung': 'Samsung', 'PRA-AL00X': 'Huawei', 'PACM00': 'Oppo', 'PBET00': 'Oppo', 'R7Plusm': 'Oppo', 'PAAT00': 'Oppo', 'PBAM00': 'Oppo', 'PADM00': 'Oppo', 'PAFM00': 'Oppo', 'PBEM00': 'Oppo', 'PAAM00': 'Oppo', 'PBBM00': 'Oppo', 'PACT00': 'Oppo', 'V1809A': 'vivo', 'PBAT00': 'Oppo', 'PADT00': 'Oppo', 'BND-TL10': 'Huawei', 'PBBT00': ' Oppo', 'PBCM10': 'Oppo', 'Mi Note 3': 'XiaoMi', 'V1816A': 'vivo', 'V1732T': 'vivo', 'V1813A': 'vivo', 'V1732A': 'vivo', 'V1818A':'vivo','CAM-TL00':'Huawei','Le X620':'leshi','M6 Note':'meizu','m3 note':'meizu','M5':'meizu','M1 E ':'meizu','BLN-AL10':'Huawei','M5 Note':'meizu','PRA-AL00':'honour','LND-AL30':'honour','NEM-AL10':'honour','BND-AL10':'honour','CAM-AL00':'honour','SCL-TL00':'honour','LLD-AL30':'honour','BLN-AL20':'honour','AUM-AL20':'honour','JSN-AL00':'honour','LLD-AL10':'honour','BLN-TL10':'honour','LLD-AL20':'honour','BLN-AL40':'honour','MYA-AL10':'honour','LLD-AL00':'honour','JSN-AL00a':'honour','JMM-AL10':'honour','DLI-AL10':'honour','JMM-AL00':'honour','V1809T':'vivo','LND-AL40':'honour','PLK-AL10':'honour','MX6':'meizu','PLK-TL01H':'honour','S9':'Samsung','KIW-TL00':'honour','V1813T':'vivo'}
1. 常见的User_Agent各字段的解释
- Mozilla/5.0: 网景公司浏览器的标识,由于互联网初期浏览器市场主要被网景公司占领,很多服务器被设置成仅响应含有标志为Mozilla的浏览器的请求,因此,新款的浏览器为了打入市场,不得不加上这个字段。
- Windows NT 6.3 : Windows 8.1的标识符
- WOW64: 32位的Windows系统运行在64位的处理器上
- AppleWebKit/537.36:苹果公司开发的呈现引擎
- KHTML:是Linux平台中Konqueror浏览器的呈现引擎KHTML
- Geckeo:呈现引擎
- like Gecko:表示其行为与Gecko浏览器引擎类似
2. 请求中为什么既含有Chrome/33.0.1750.29又含有Safari/537.36字段?
因为AppleWebKit渲染引擎是苹果公司开发的,而Google公司要采用它,为了获得服务器端的正确响应,仅在Safari浏览器UA字段中增加了Chrome字段。
例如:
- Safari浏览器的UA:Mozilla/5.0 (平台;加密类型;操作系统或CPU;语言)AppleWebKit/AppleWebKit版本号(KHTML, like Gecko) Safari/Safari 版本号
- Chrome浏览器的UA:Mozilla/5.0 (平台;加密类型;操作系统或CPU;语言)AppleWebKit/AppleWebKit版本号 (KHTML, like Gecko) Chrome/ Chrome 版本号 Safari/Safari 版本号
3. 为什么UA中包含多个浏览器的标识,如:Mozilla/5.0、Chrome/33.0.1750.29、Safari/537.36,以及渲染引擎标识?
多增加一些字段都是为了让服务器检测到它支持的浏览器标识,以便获得服务器的响应,从而提升用户体验。
附:Windows NT 版本对应关系
NT 版本 | 市场名称 | 版本 | 发行日期 | RTM Build |
---|---|---|---|---|
NT 3.1 | Windows NT 3.1 | Workstation(仅被命名为“Windows NT”), Advanced Server | 1993年7月27日 | 528 |
NT 3.5 | Windows NT 3.5 | Workstation, Advanced Server | 1994年9月5日 | 807 |
NT 3.51 | Windows NT 3.51 | Workstation, Server | 1995年5月30日 | 1057 |
NT 4.0 | Windows NT 4.0 |
Workstation, Server, Server Enterprise Edition, Terminal Server, Embedded |
1996年7月29日 | 1381 |
NT 5.0 | Windows 2000 | Professional, Server, Advanced Server, DataCenter Server | 2000年2月17日 | 2195 |
NT 5.1 | Windows XP | Home, Professional, Media Center, Tablet PC, Starter, Embedded, N | 2001年10月15日 | 2600 |
NT5.2 | Windows XP | 64-bit Edition Version 2003 (此专为AMD64而开发), Professional x64 Edition |
|
3790 |
Windows Server 2003 | Standard, Enterprise, DataCenter, Web, Small Business Server | 2003年4月24日 | ||
Windows Server 2003 R2 | Standard, Enterprise, DataCenter, Web, Small Business Server | 2005年12月6日 | ||
NT6.0 | Windows Vista | Starter, Home Basic, Home Premium, Professional, Enterprise, Ultimate | 2007年1月30日 |
|
Windows Server 2008 | Foundation, Standard, Enterprise, Datacenter, Web Server, HPC Server, Itanium-Based Systems | 2008年8月27日 |
|
|
NT6.1 | Windows 7 | Starter, Home Basic, Home Premium, Professional, Enterprise, Ultimate | 2009年10月22日 |
|
Windows Server 2008 R2 | Foundation, Standard, Enterprise, Datacenter, Web Server, HPC Server, Itanium-Based Systems | 2009年10月22日 |
|
|
NT6.2 | Windows 8 | Windows 8, Windows 8 Pro, Windows 8 Enterprise, Windows RT | 2012年10月26日 | 9200 |
Windows Phone 8 | 不适用 | 2012年10月30日 | 9900 | |
Windows Server 2012 | Foundation, Essentials, Standard, Datacenter | 2012年9月4日 | 9200 | |
NT6.3 | Windows 8.1 | Windows 8.1, Windows 8.1 Pro, Windows 8.1 Enterprise, Windows RT 8.1 | 2013年10月18日 | 9600 |
Windows Phone 8.1 | 不适用 | 2014年4月2日 | 不适用 | |
Windows Server 2012 R2 | Essentials, Standard, Datacenter | 2013年10月18日 | 9600 | |
NT6.4 | Windows 10 | Technical Preview (v.6.4.9841) | 2014年10月1日 | 9841 |
Technical Preview (v.6.4.9860) | 2014年10月21日 | 9860 | ||
Technical Preview (v.6.4.9879) | 2014年11月13日 | 9879 | ||
NT 10.0 | Windows 10 |
Technical Preview (v.10.0.9888) |
2014年12月14日 |
9888 |
Technical Preview (v.10.0.9926) |
2015年1月24日 | 9926 | ||
Technical Preview (v.10.0.10041) | 2015年3月19日 | 10041 | ||
Insider Preview (v.10.0.10074) | 2015年4月30日 | 10074 | ||
Insider Preview (v.10.0.10158) | 2015年6月30日 | 10158 | ||
Insider Preview (v.10.0.10159) | 2015年7月1日 | 10159 | ||
Insider Preview (v.10.0.10162) | 2015年7月3日 | 10162 | ||
Windows10家庭版,Windows10专业版,Windows10企业版,和Windows10教育版 | 2015年7月29日 | 10240 | ||
Insider Preview (v.10.0.10586) | 2015年10月13日 | 10586 |
利用 Python-user-agents 解析 User_Agent相关推荐
- python分析pcap文件_利用Python库Scapy解析pcap文件的方法
每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...
- 给知网没有书签的pdf文件添加书签(利用python解析txt文件内容并为pdf添加目录)
今天利用tampermonkey的知网下载助手脚本下载pdf格式论文时,发现论文缺少书签,而脚本可以下载一个txt格式的书签(目录),因此打算利用python将txt格式的目录添加到pdf中. txt ...
- 请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报——python学习笔记
1. 题目: 请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报: 题目是廖雪峰老师的python教程中XML的练习. 本篇博文只是针对这一题目,没有做详细的介绍,如果看不懂可以在 ...
- 24位ADC数据转换,保存为hex文件,并利用python解析hex文件画图
目前有许多ADC芯片都是24位精度的,这个位数稍显尴尬,因为在常用的变量类型中,有8bit.16bit.32bit,唯独没有24bit,这就导致我们在很多情况下,需要自己敲代码去处理这个24bit的 ...
- 利用python解析手机通讯录
2019独角兽企业重金招聘Python工程师标准>>> 最新在处理手机通信录的时候,导出的手机通信录的文件VCF文件的内容如下: BEGIN:VCARD VERSION:3.0 N: ...
- CDays–5 习题二(利用Python科学计算特性,使用常用计算符)及相关内容解析。...
利用python作为科学计算器.熟悉Python中的常用运算符,并分别求出表达式12*34+78-132/6.(12*(34+78)-132)/6.(86/40)**5的值.并利用math模块进行数学 ...
- python爬去百度文库_利用Python语言轻松爬取数据[精品文档]
利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...
- python每隔一段时间保存网页内容_利用Python轻松爬取网页题库答案!教孩子不怕尴尬了!...
大家有没有遇到这种令人尴尬的情况:"好不容易在网上找到需要的资源数据,可是不容易下载下来!"如果是通过一页一页的粘贴复制来下载,真的让人难以忍受,特别是像我这种急性子,真得会让人窒 ...
- python爬虫案例-python爬虫详细解析附案例
什么是爬虫框架 说这个之前,得先说说什么是框架: 是实现业界标准的组件规范:比如众所周知的MVC开发规范 提供规范所要求之基础功能的软件产品:比如Django框架就是MVC的开发框架,但它还提供了其他 ...
- python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...
最新文章
- hiveserver2 kerberos 认证失败
- pythonselenium设置_selenium 怎样设置请求头?
- 数据库设计与开发概述
- 队列读取器代理 遇到错误 Row handle is invalid
- 引入用于 Azure IoT Edge 的 Visual Studio 工具
- 可持久化线段树学习笔记
- python安装百度aip_Python3.6安装aip
- codeforces 297 E. Anya and Cubes
- java map 元素个数_Java 小模块之--统计字符串中元素个数
- 洛谷P2568 GCD(莫比乌斯反演)
- POI导出Excel2003
- linux系统组成以及运行模式
- python历史时间轴可视化_TimeLine一个基于Python的时间轴创建者 | MOS86
- crontab每隔1小时运行一次
- 手机桌面上的计算机怎么删除,怎样删除桌面图标?删除桌面图标方法教学
- matlab求条件概率密度_数值优化方法—迭代法amp;终止条件
- Vue+Element UI弹窗实现表格编辑
- saas php7框架开源,HRM SAAS v2.5.7 – PHP人力资源管理系统SaaS平台版
- CF1578F Framing Pictures 旋转卡壳+积分
- [go学习笔记.第一章] go可以做什么