利用 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 ``执行对原始用户代理字符串的实际解析。

用法

各种基本信息可以帮忙识别访问者,比如设备,操作系统,浏览器等属性

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
  • IA64: 2003年3月28日

  • x64: 2005年4月25日

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日
  • 6000 (RTM)

  • 6001 (SP1)

  • 6002 (SP2)

Windows Server 2008 Foundation, Standard, Enterprise, Datacenter, Web Server, HPC Server, Itanium-Based Systems 2008年8月27日
  • 6001 (RTM)

  • 6002 (SP2)

NT6.1 Windows 7 Starter, Home Basic, Home Premium, Professional, Enterprise, Ultimate 2009年10月22日
  • 7600 (RTM)

  • 7601 (SP1)

Windows Server 2008 R2 Foundation, Standard, Enterprise, Datacenter, Web Server, HPC Server, Itanium-Based Systems 2009年10月22日
  • 7600 (RTM)

  • 7601 (SP1)

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学习笔记)