跳转到主要内容

一个通过解析浏览器用户代理字符串来识别设备(手机、平板电脑)及其功能的库。

项目描述

Python用户代理

user_agents是一个Python库,它通过解析(浏览器/HTTP)用户代理字符串,提供了一种简单的方式来识别/检测手机、平板电脑等设备及其功能。目标是可靠地检测

  • 用户代理是手机、平板电脑或PC基于的设备
  • 用户代理具有触摸能力(具有触摸屏)

user_agents依赖于优秀的ua-parser来执行原始用户代理字符串的实际解析。

安装

Build status

user-agents托管在PyPI上,可以按以下方式安装

pip install pyyaml ua-parser user-agents

或者,您也可以从Github获取最新的源代码,并手动安装。

用法

可以访问一些基本信息,这些信息可以帮助您识别访客,包括browserdeviceos属性。例如

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)

# 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"

user_agents还公开了一些其他更“复杂”的属性,这些属性是从上面定义的一个或多个基本属性派生出来的。目前,这些属性应该可以正确识别流行的平台/设备,支持较小设备的pull requests总是受欢迎。

目前支持以下属性

  • is_mobile:是否识别为手机(iPhone、Android手机、BlackBerry、Windows Phone设备等)的用户代理
  • is_tablet:是否识别为平板设备(iPad、Kindle Fire、Nexus 7等)的用户代理
  • is_pc:是否识别为运行传统“桌面”操作系统(Windows、OS X、Linux)的用户代理
  • 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"

# Now a Samsung Galaxy S3
ua_string = 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
user_agent = parse(ua_string)
user_agent.is_mobile # returns True
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "Samsung GT-I9300 / Android 4.0.4 / Android 4.0.4"

# iPad's user agent string
ua_string = 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns True
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "iPad / iOS 3.2 / Mobile Safari 4.0.4"

# Kindle Fire's user agent string
ua_string = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns True
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "Kindle / Android / Amazon Silk 1.1.0-80"

# Touch capable Windows 8 device
ua_string = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns True
user_agent.is_bot # returns False
str(user_agent) # returns "PC / Windows 8 / IE 10"

运行测试

python -m unittest discover

变更日志

版本 2.2.0 (2020-08-23)

  • ua-parser ≥ 0.10.0 是必需的。感谢 @jnozsc!
  • UserAgent 添加了 get_device()get_os()get_browser() 实例方法。感谢 @rodrigondec!

版本 2.1 (2020-02-08)

  • python-user-agents 现在需要 ua-parser≥0.9.0。感谢 @jnozsc!
  • 正确检测 Chrome Mobile 浏览器系列。感谢 @jnozsc!

版本 2.0 (2019-04-07)

  • python-user-agents 现在需要 ua-parser≥0.8.0。感谢 @IMDagger!

版本 1.1

  • 修复了打包问题

版本 1.0

  • 添加了对 ua-parser 0.4.0 的兼容性
  • user_agent.device.branduser_agent.device.model 中访问更多设备信息

版本 0.3.2

  • 更好的手机检测
  • 更好的PC检测

版本 0.3.1

  • 当检测到移动蜘蛛时,user_agent.is_mobile 返回 True

版本 0.3.0

  • 为方便字符串格式化添加了 str/unicode 方法

版本 0.2.0

  • 修复了针对较新版本 ua-parser 运行时的错误
  • 支持 Python 3

版本 0.1.1

  • 添加了 is_bot 属性
  • Symbian OS 设备现在被识别为移动设备

版本 0.1

  • 初始发布

由 Stamps 团队的酷哥们开发。Stamps.

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

user-agents-2.2.0.tar.gz (9.5 kB 查看散列)

上传时间

构建分布

user_agents-2.2.0-py3-none-any.whl (9.6 kB 查看散列)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面