我正在尝试解析用户代理字符串,并理想地将它们提取到Python字典中。在搜索网之后,似乎唯一的方法是从头开始编写正则表达式解析器。据我所知,迄今为止最好的解决方案是https://github.com/ua-parser的贡献者所做的事情。
现在,请考虑以下用户代理(UA)字符串:
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
当我通过上面提到的ua-parser(在Python中)提供它时,我得到以下字典:
{ 'device': {'brand': None, 'family': 'Other', 'model': None},
'os': { 'family': 'Windows 7',
'major': None,
'minor': None,
'patch': None,
'patch_minor': None},
'string': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko',
'user_agent': {'family': 'IE', 'major': '11', 'minor': '0', 'patch': None}}
所以这是我的问题:为什么返回的user_agent
字段说它的系列是IE 11,显然,在原始UA字符串中没有引用IE?第一个关键字,即Mozilla / 5.0发生了什么?为什么Windows NT 6.1被视为Windows 7系列?在我看来,输出字典与输入UA字符串几乎没有关系。尝试在以下在线解析器中提供UA字符串并亲自查看:
我疯了还是这些解析器完全脱离了标记?
旁注:用户代理字符串遵循HTTP标准https://tools.ietf.org/html/rfc7231#section-5.5.3指定的明确定义的格式。因此,您认为解析它们是一件简单的事情,但似乎并非如此......
答案 0 :(得分:0)
让我们分解每个参数并理解它:
Mozilla / 5.0 - 说明浏览器的常规令牌是Mozilla兼容的,现在几乎每个浏览器都会使用。
Windows NT 6.1 - 浏览器的平台。 Windows NT是Windows操作系统基于的内核。每个版本都是Windows的不同版本(请参阅here)。
Trident / 7.0 - 是IE使用的布局引擎。它分为 Engine_Name / Version 。
rv:11.0 - 浏览器版本。这里表示IE11。
像Gecko 一样 - 为了让网站为浏览器识别正确的CSS规则,他们会在User-Agent中搜索某个字符串。通过添加like Gecko
网站知道IE能够处理Gecko模板化CSS规则。
您可以在MSDN上阅读有关IE用户代理的更多信息。