53

在 Python 中解析用户代理字符串以可靠检测的最佳方法是什么

  1. 浏览器
  2. 浏览器版本
  3. 操作系统

或者可能是任何帮助库

4

8 回答 8

74

我终于决定自己写了,我对结果很满意。请随时使用/修改/向我发送补丁等。

它在这里: http: //pypi.python.org/pypi/httpagentparser

使用示例:

>>> import httpagentparser
>>> s = "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.9 (KHTML, like Gecko) \
        Chrome/5.0.307.11 Safari/532.9"
>>> print(httpagentparser.simple_detect(s))
('Linux', 'Chrome 5.0.307.11')
>>> print(httpagentparser.detect(s))
{'os': {'name': 'Linux'},
 'browser': {'version': '5.0.307.11', 'name': 'Chrome'}}

>>> s = "Mozilla/5.0 (Linux; U; Android 2.3.5; en-in; HTC_DesireS_S510e Build/GRJ90) \
        AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
>>> print(httpagentparser.simple_detect(s))
('Android Linux 2.3.5', 'Safari 4.0')
>>> print(httpagentparser.detect(s))
{'dist': {'version': '2.3.5', 'name': 'Android'},
'os': {'name': 'Linux'},
'browser': {'version': '4.0', 'name': 'Safari'}}
于 2009-07-20T06:24:40.673 回答
10

Hicro Kee 的 UASparser for Python 。通过版本检查从远程服务器自动更新数据文件和缓存。

于 2009-08-27T09:10:50.527 回答
8

Werkzeug 内置了用户代理解析。

新链接(2018 年 6 月) http://werkzeug.pocoo.org/docs/0.14/utils/#module-werkzeug.useragents

于 2012-06-21T23:25:03.523 回答
7

对这个问题的其他回答现在已经相当老了。我相信浏览器用户代理解析的新标准是 Browserscope 的用户代理解析器

许多其他语言中也可以方便地使用完全相同的匹配模式。有一天,您可能还想在 JavaScript 中解析一些 UA 字符串,而不必担心解析不一致。

于 2014-12-24T21:08:03.497 回答
6

在针对Firefox User Agents 的完整语料库运行这些建议后,我发现用于比较的版本号解析非常差。

如果这是您需要的,我建议您查看UAparser,它曾经是browserscope项目的一部分。文档在这里。

于 2012-04-11T16:25:00.467 回答
3

浏览器上限解析器应该可以工作。不过可能有点慢。。

于 2009-05-30T05:28:49.337 回答
2

但是,如果您希望在 Python 端解析所有这些,您可以使用http://browsers.garykeith.com/downloads.asp提供的 XML/INI 文件在用户代理上进行查找。这与 php 的 get_browser() 函数中使用的文件相同。

于 2009-05-29T19:25:27.500 回答
1

由于这不是关于开源解决方案,我怀疑这将成为第一个答案。无论如何,当涉及到 User-Agent 分析时,事实上的标准是 WURFL(现在是商业产品。

这是对技术文档的参考。

https://docs.scientiamobile.com/documentation/infuze/infuze-python-module-user-guide

除此之外,WURFL 微服务可在主要的云提供商市场上使用,并且还支持 Python 客户端

于 2020-10-27T17:38:20.783 回答