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()
# 获取随机浏览器用户代理字符串
print(ua.random)
# 或者从特定浏览器获取用户代理字符串
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 的随机用户代理:
from fake_useragent import UserAgent
ua = UserAgent(browsers=['edge', 'chrome'])
ua.random
注意: Fakeuser-agent 了解:Chrome、Edge、Firefox 和 Safari。其他浏览器不够流行,不在我们使用的数据集中。
如果你想指定自己的操作系统,可以通过 os
参数实现(默认为:["windows", "macos", "linux"]
)。
在这个例子中,你只会得到 Linux 用户代理:
from fake_useragent import UserAgent
ua = UserAgent(os='linux')
ua.random
你还可以指定要使用的平台类型,可以通过 platforms
参数实现(默认为 ["pc", "mobile", "tablet"]
)。
这个例子将只返回移动设备的随机用户代理:
from fake_useragent import UserAgent
ua = UserAgent(platforms='mobile')
ua.random
如果你想返回更新的用户代理字符串,可以使用 min_version
参数(默认为:0.0
,意味着所有用户代理都会匹配)。
在这个例子中,你只会得到最低版本为 120.0 的用户代理:
from fake_useragent import UserAgent
ua = UserAgent(min_version=120.0)
ua.random
为了向后兼容,仍可以使用 min_percentage
参数指定最小使用百分比。然而,当前的用户代理列表不包含这个统计数据。因此,所有用户代理都会匹配。
提示: 当然,你可以根据自己的喜好组合所有这些参数!
用户代理 Python 字典
从 1.3.0 版本开始,我们现在还提供以下 "get" 属性,它们返回整个 UA 的 Python 字典,而不仅仅是用户代理字符串:
警告 原始 JSON 对象(在 Python 字典中)按原样返回。 这意味着,这个数据结构可能在未来发生变化!
请注意,以下这些 "get" 属性在未来可能不会返回相同的键/值对。 如果你想使用稳定的接口,请使用
ua.random
或类似的方法。
from fake_useragent import UserAgent
ua = UserAgent()
# 随机用户代理字典(对象)
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'}
# 更多 get 属性:
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
# 以及一个带参数的方法。
# 这与使用 ua.getFirefox 完全相同
ua.getBrowser('firefox')
注意事项
在极少数情况下如果出现问题,你可以使用 fallback
参数覆盖回退字符串:
import fake_useragent
ua = fake_useragent.UserAgent(fallback='your favorite Browser')
# 在出现问题的情况下,再次强调这是非常非常罕见的情况
ua.random == 'your favorite Browser'
如果你尝试获取未知浏览器:
from fake_useragent import UserAgent
ua = UserAgent()
print(ua.unknown)
#在获取浏览器时发生错误:randm,但已使用回退方式抑制。
#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
如果你需要保护一些属性不被 UserAgent 中的 __getattr__
方法覆盖,
使用 safe_attrs
,你可以在其中传递属性名称。
至少这将防止在找不到属性时引发 FakeUserAgentError。
例如,当使用带有 injections <https://github.com/tailhook/injections>
_ 的 fake-useragent 时,你需要:
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)
你随时欢迎发布 issues。
请不要忘记提及你正在使用的版本。
对于开发者
由于 GitHub Actions 无法访问 willshouse.com 并且有 Cloudflare 保护。我们可以运行以下脚本自动从外部数据源抓取用户代理字符串。该脚本将复制 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版本关于importlib资源(Python v3.10或更高版本)以使
files()
能够工作 importlib_metadata
现在应该也能在3.8之前的Python版本上工作- 移除过时的
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
文件 - 改进GitHub Actions作业,使用pip缓存
- 以及各种小修复
-
0.1.13 2022年10月21日
- 实现
browsers
参数,允许你覆盖想要使用的浏览器名称 - 修复Internet Explorer和Edge的浏览器列表
- 不再依赖w3schools.com
- 清理数据(临时)文件格式
- 更新后备缓存服务器URL / 使用JSON Lines作为文件格式
- 从Travis迁移到GitHub Actions
- 使用
black
Python格式化工具代替Flake
- 实现
-
0.1.12 2022年3月31日
- 分叉
-
0.1.11 2018年10月4日
- 将
s3 + cloudfront
后备移至heroku.com
,因为上个月有人从佛罗里达进行了约2500万次请求
- 将
-
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日
- 修复bug
use_cache_server
没有影响任何东西 w3schools.com <https://www.w3schools.com/browsers/browsers_stats.asp>
_移至https
- 添加了
verify_ssl
选项,默认为True
(Python 2.7.9-和3.4.3-的urllib.urlopen
ssl上下文不受支持)
- 修复bug
-
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 xxxx年xx月xx日
- xxxxx ?????
作者
你可以访问作者页面。