包含真实世界数据库的最新简单用户代理伪造器
项目描述
fake-useragent
包含真实世界数据库的最新简单用户代理伪造器。
功能
- 数据已从https://user-agents.net/预下载,并且数据是包的一部分
- 数据包括当前浏览器版本或低一个版本
- 本地检索用户代理字符串(包括桌面和移动用户代理)
- 检索用户代理Python字典
- 支持Python 3.x
安装
pip install fake-useragent
或者如果您安装了多个 Python / pip 版本,请使用 pip3
pip3 install fake-useragent
使用方法
以下是一些简单的使用示例,更高级的使用方法请参阅本说明书的后续章节
from fake_useragent import UserAgent
ua = UserAgent()
# Get a random browser user-agent string
print(ua.random)
# Or get user-agent string from a specific browser
print(ua.chrome)
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
print(ua.google)
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13
print(ua['google chrome'])
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36
print(ua.firefox)
# Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
print(ua.ff)
# Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
print(ua.safari)
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15
其他使用方法
自 v1.2.0 版本以来,fake-useragent 提供了以下新功能。
如果您想指定自己的浏览器列表,可以通过 browsers
参数来实现(默认为:["chrome", "edge", "firefox", "safari"]
)。
此示例将只返回来自 Edge 和 Chrome 的随机 user-agent。
from fake_useragent import UserAgent
ua = UserAgent(browsers=['edge', 'chrome'])
ua.random
注意: Fakeuser-agent 已知的浏览器有:Chrome、Edge、Firefox 和 Safari。其他浏览器不够流行,并不包含我们使用的数据库中。
如果您想指定自己的操作系统,可以通过 os
参数来实现(默认为:["windows", "macos", "linux"]
)。
在此示例中,您将只能获得 Linux user-agent。
from fake_useragent import UserAgent
ua = UserAgent(os='linux')
ua.random
您还可以指定要使用的平台类型,您可以通过 platforms
参数来实现(默认为 ["pc", "mobile", "tablet"]
。此示例将只返回来自移动设备的随机 user-agent)。
from fake_useragent import UserAgent
ua = UserAgent(platforms='mobile')
ua.random
如果您想返回更近期的 user-agent 字符串,可以调整 min_version
参数(默认为:0.0
,这意味着所有 user-agent 都将匹配)。
在此示例中,您只能获取最小版本为 120.0 的 user-agent。
from fake_useragent import UserAgent
ua = UserAgent(min_version=120.0)
ua.random
为了向后兼容,还可以通过 min_percentage
参数指定最小使用百分比。然而,当前的用户-agent 列表中不包含此统计信息。因此,所有 user-agent 都将匹配。
提示:当然,您可以按需组合所有这些参数!
User-agent Python 字典
自版本 1.3.0 以来,我们现在还提供了以下 "get" 属性,它们返回整个 UA 的 Python 字典,而不仅仅是 user-agent 字符串。
警告:原始 JSON 对象(在 Python 字典中)将按原样返回。这意味着该数据结构将来可能会发生变化!
请注意,以下 "get" 属性可能在未来不返回相同的键/值对。如果您想使用稳定的接口,请使用上述提到的
ua.random
或类似方法。
from fake_useragent import UserAgent
ua = UserAgent()
# Random user-agent dictionary (object)
ua.getRandom
# {'percent': 0.8, 'useragent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76', 'system': 'Edge 116.0 Win10', 'browser': 'edge', 'version': 116.0, 'os': 'win10'}
# More get properties:
ua.getFirefox
# {'percent': 0.3, 'useragent': 'Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/118.0', 'system': 'Firefox 118.0 Win10', 'browser': 'firefox', 'version': 118.0, 'os': 'win10'}
ua.getChrome
ua.getSafari
ua.getEdge
# And a method with an argument.
# This is exactly the same as using: ua.getFirefox
ua.getBrowser('firefox')
注意
您可以使用 fallback
参数覆盖回退字符串,在极少数情况下可能会失败。
import fake_useragent
ua = fake_useragent.UserAgent(fallback='your favorite Browser')
# in case if something went wrong, one more time it is REALLY!!! rare case
ua.random == 'your favorite Browser'
如果您尝试获取未知浏览器
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.unknown)
#Error occurred during getting browser: randm, but was suppressed with fallback.
#Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0
如果您需要通过 __getattr__
方法保护 UserAgent 中的某些属性不被覆盖,请使用 safe_attrs
并传递属性名称。至少这可以防止您在属性未找到时引发 FakeUserAgentError。
例如,当使用 fakeuseragent 与 injections <https://github.com/tailhook/injections>
时,您需要
import fake_useragent
ua = fake_useragent.UserAgent(safe_attrs=('__injections__',))
请勿使用,除非您理解为什么需要它。这是针对极少数极端情况的魔法。
遇到问题了吗?
请确保您正在使用最新版本!
pip install --upgrade fake-useragent
如果这不起作用,请尝试安装最新包版本,如下所示(1.5.1
是一个示例,请检查 PyPi 上的最新版本)
pip install fake-useragent==1.5.1
通过 Python 控制台检查版本
import fake_useragent
print(fake_useragent.VERSION)
您始终欢迎提交问题。
请记住提及您正在使用的版本。
对于开发者
由于 GitHub Actions 无法访问 willshouse.com 且有 Cloudflare 保护,我们可以运行以下脚本来自动从外部数据源抓取 user-agent 字符串。该脚本将 JSONlines 文件复制到 src/fake_useragent/data
目录。执行
./update_data_file.sh
数据 JSON 文件是 Python 包的一部分,请参阅 pyproject.toml。有关数据文件支持的更多信息。
Python 虚拟环境
我们建议在安装 Pip 包之前使用 Python 虚拟环境,如下所示
python -m virtualenv env
source env/bin/activate
测试
pip install -r requirements.txt
tox
代码风格检查
使用 ruff 修复导入问题
pip install -r requirements.txt
ruff check --select="I" --fix .
修复 black 代码格式错误
pip install -r requirements.txt
black .
注意: 当 ruff v1.0 发布时,我们很可能完全转向 ruff
而不是 black
。
变更日志
-
1.5.1 2024年3月16日
- 移除用户代理字符串中的尾随空格
-
1.5.0 2024年3月8日
- 迁移到新的用户代理数据源(感谢 @BoudewijnZwart),向后兼容的 API。
- 更新所有 pip 包依赖项到最新稳定版本
-
1.4.0 2023年11月24日
- 更新所有 PIP 包
- 支持 Python 3.12(感谢 @vladkens)
- 修复缓存抓取器中的包冲突
- 改进 ruff CLI 调用
-
1.3.0 2023年10月2日
- 引入新的
ua.getRandom
、ua.getFirefox
、ua.getChrome
、ua.getSafari
。还有一个通用方法:ua.getBrowser(..)
(例如:getBrowser('firefox')
)- 上述新属性允许您检索整个原始 Python 字典,而不仅仅是 UA 字符串。
- 这些属性将来可能会返回不同的键/值对!
- 将
os
参数 'windows' 更改为同时检查win10
和win7
值(以前只检查win10
),因此返回更多的 UA - 改进了用户代理抓取器(现在也包含 Safari 浏览器)
- 更新 browsers.json 数据文件
- 引入新的
-
1.2.1 2023年8月2日
- 在
min_percentage
检查中进行了小的改进 - 更新所有 Pip 包依赖项
- 在
-
1.2.0 2023年8月2日
- 更新浏览器用户代理数据
- 允许对浏览器、操作系统和使用百分比进行筛选
- 更新缓存抓取器以抓取新的用户代理字符串数据源
- 适配代码以支持新的 JSON 数据格式
- 参数
use_external_data=True
和verify_ssl
已 删除。如果您使用这些参数,只需从您的代码中移除它们即可!
-
1.1.3 2023年3月20日
- 更新依赖项
-
1.1.2 2023年2月8日
- 安全修复
-
1.1.1 2022年12月4日
- 从用户代理字符串中移除空白,这是一个补丁版本
-
1.1.0 2022年11月26日
- 将
pkg_resource
添加为尝试检索本地 JSON 数据文件的备用机制
- 将
-
1.0.1 2022年11月10日
- 将
importlib-metadata
和importlib-resources
添加为依赖项 - 针对特定 Python 版本(python v3.10 或更高)检查 importlib 资源,以便使
files()
正常运行 importlib_metadata
现在也应该在 Python 版本低于 3.8 的版本上工作- 删除过时的
MANIFEST.in
文件
- 将
-
1.0.0 2022年11月17日
- 将 JSON Lines 数据文件作为 Python 包的一部分,数据从本地检索
- 在
myproject.toml
文件中扩展package-data
支持
- 在
- 删除集中式缓存服务器实现
- 创建真正的单元测试,这些测试应该可靠、快速、独立且无需互联网连接
- 将 JSON Lines 数据文件作为 Python 包的一部分,数据从本地检索
-
0.1.14 2022年11月5日
- 使用现代 Python >=3.7 语法提高代码质量标准
- 迁移到
pyproject.toml
构建系统格式 + 语法检查 - 向 toml 文件添加额外的分类器
- 改进
tox.ini
文件 - 改进使用 pip 缓存的 GitHub Actions 作业
- 以及各种小修复
-
0.1.13 2022年10月21日
- 实现
browsers
参数,允许您覆盖您想要使用的浏览器名称 - 修复了 Internet Explorer 和 Edge 的浏览器列表
- 不再依赖于 w3schools.com
- 清理数据(临时)文件格式
- 更新备用缓存服务器 URL / 使用 JSON Lines 作为文件格式
- 迁移到 GitHub Actions 而不是 Travis
- 使用
black
Python 格式化程序,而不是 Flake
- 实现
-
0.1.12 2022年3月31日
- forked
-
0.1.11 2018年10月4日
- 将
s3 + cloudfront
备用方案移至heroku.com
,因为佛罗里达州有人上个月做了约 25M 个请求
- 将
-
0.1.10 2018年2月11日
- 修复文档
cloudfront
URL 的小错误
- 修复文档
-
0.1.9 2018年2月11日
- 修复
w3schools.com
将IE/Edge
重命名为Edge/IE
- 将
heroku.com
的回退移至s3 + cloudfront
- 停止测试 Python3.3 和 pypy
- 修复
-
0.1.8 2017年11月2日
- 修复
useragentstring.com
出现的错误:无法通过套接字连接到本地 MySQL 服务器
- 修复
-
0.1.7 2017年4月2日
- 修复损坏的 README.rst
-
0.1.6 2017年4月2日
- 修复了
use_cache_server
的错误,但不会影响任何东西 w3schools.com <https://w3schools.org.cn/browsers/browsers_stats.asp>
移至https
- 添加了
verify_ssl
选项,默认值为True
(Python 2.7.9- 和 3.4.3- 的urllib.urlopen
ssl 上下文不支持)
- 修复了
-
0.1.5 2017年2月28日
- 为 Internet Explorer 添加了
ua.edge
别名 - w3schools.com 开始显示
Edge
统计数据 - 不再测试 Python 2.6
- 添加了
use_cache_server
选项 - 将
fake_useragent.settings.HTTP_TIMEOUT
增加到 5 秒
- 为 Internet Explorer 添加了
-
0.1.4 2016年12月14日
- 添加了对自定义数据文件位置的 支持
- 添加了对
fallback
浏览器的支持,以防数据源不可用 - 为
fake_useragent.UserAgent
添加了别名fake_useragent.FakeUserAgent
- 为
fake_useragent.FakeUserAgentError
添加了别名fake_useragent.UserAgentError
- 将
fake_useragent.settings.HTTP_TIMEOUT
减少到 3 秒 - 开始迁移到新的数据文件格式
- 简化了 4 年以上的过时代码
- 提高了线程/greenlet 的安全性
- 添加了详细日志记录
- 添加了
safe_attrs
以防止被__getattr__
覆盖
-
0.1.3 2016年11月24日
- 当远程服务不可用时,添加了托管数据文件
- 当无法下载数据时,引发
fake_useragent.errors.FakeUserAgentError
- 当出现未知浏览器时,用
fake_useragent.errors.FakeUserAgentError
替代None
- 在尝试下载数据时,在
gevent
补丁环境中添加了gevent.sleep
支持
-
X.X.X xxxxxxx xx, xxxx
- xxxxx ?????
作者
您可以在 作者页面 上访问。
项目详情
下载文件
下载适合您平台的项目文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。