跳转到主要内容

包含真实世界数据库的最新简单用户代理伪造器

项目描述

Test & Deploy fake-useragent Ruff linter CodeQL

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.getRandomua.getFirefoxua.getChromeua.getSafari。还有一个通用方法:ua.getBrowser(..)(例如:getBrowser('firefox')
      • 上述新属性允许您检索整个原始 Python 字典,而不仅仅是 UA 字符串。
      • 这些属性将来可能会返回不同的键/值对!
    • os 参数 'windows' 更改为同时检查 win10win7 值(以前只检查 win10),因此返回更多的 UA
    • 改进了用户代理抓取器(现在也包含 Safari 浏览器)
    • 更新 browsers.json 数据文件
  • 1.2.1 2023年8月2日

    • min_percentage 检查中进行了小的改进
    • 更新所有 Pip 包依赖项
  • 1.2.0 2023年8月2日

    • 更新浏览器用户代理数据
    • 允许对浏览器、操作系统和使用百分比进行筛选
    • 更新缓存抓取器以抓取新的用户代理字符串数据源
    • 适配代码以支持新的 JSON 数据格式
    • 参数 use_external_data=Trueverify_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-metadataimportlib-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 支持
    • 删除集中式缓存服务器实现
    • 创建真正的单元测试,这些测试应该可靠、快速、独立且无需互联网连接
  • 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.comIE/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 秒
  • 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 ?????

作者

您可以在 作者页面 上访问。

项目详情


下载文件

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

源代码发行版

fake-useragent-1.5.1.tar.gz (22.6 kB 查看哈希值)

上传时间 源代码

构建发行版

fake_useragent-1.5.1-py3-none-any.whl (17.2 kB 查看哈希值)

上传时间 Python 3

由以下支持