DeepSeek周末降价监控工具:Python自动抓取价格并邮件提醒
周末想跑一批非紧急的 AI 任务,又担心 DeepSeek API 价格波动,手动刷官网太麻烦?我写了一个 Python 小工具,定时检测 DeepSeek 价格变动,如果发现周末降价,就自动发一封邮件提醒。本文完整拆解这个工具的设计思路、完整代码、定时运行方式和常见坑,新手可以直接抄作业,有经验的开发者也可以拿去扩展成更通用的价格监控通知服务。
1. 背景与核心概念
1.1 “梁文谷”和“周末谷价”是什么
“梁文谷”是社区里对 DeepSeek 相关价格波动的调侃说法,本质上是用户在关注 DeepSeek 开放平台 API 的计费变动。所谓“周末谷价”,就是指平台在某些时段(尤其是周末或活动周期)调整价格,让 API 调用成本进入一个相对低位的“谷底区间”。这个表达虽然带一点玩梗色彩,但背后是实实在在的工程需求:AI API 调用成本对个人开发者和中小企业来说,是需要精细化控制的指标。
很多开发者会在周末跑一些非实时、可延后的大批量任务,比如:
- 批量文本分类、信息抽取。
- 离线生成摘要、翻译语料。
- 用 DeepSeek 作为 Codex、VSCode 等 AI 编程工具的补充模型,跑代码评审或测试用例生成。
- 本地部署 DeepSeek 模型前后,用 API 做效果对比验证。
这些任务的特点是:不用抢实时性、但消耗 token 量大。如果能赶上“降价窗口”再跑,成本能下降不少。问题是,价格调整不会每次都发邮件通知你,手动盯着网页又太累。所以“价格监控 + 邮件通知”这个小工具就非常有价值。
1.2 这个工具解决什么问题
这个工具要解决三件事:
- 定时获取 DeepSeek 开放平台的价格信息,并解析出关键模型(比如 DeepSeek-V3、DeepSeek-R1 等)的输入/输出单价。
- 判断当前时间是否为周末,只有周末满足条件才触发通知逻辑,避免工作日也频繁打扰。
- 将价格变动通过邮件发送到指定邮箱,让开发者第一时间知道“可以开始跑低成本任务了”。
更通用一点说,这是一个“定时巡检 + 条件判断 + 多渠道通知”的自动化脚本骨架。今天监控的是 DeepSeek API 价格,明天换成监控服务器磁盘、网站可用性、电商商品价格,核心思路完全一致。
1.3 适用场景与读者人群
本文适合以下读者:
- 使用 DeepSeek API 开发应用,想控制成本的个人开发者。
- 对 Python 脚本、定时任务、SMTP 邮件发送感兴趣的初学者。
- 想做“网页信息监控 + 通知提醒”类小工具,但不知道从哪下手的开发者。
- 使用 Codex、VSCode 等工具接入 DeepSeek,对 token 消耗敏感的重度用户。
读完本文后,你会掌握:
- 如何用 Python 获取并解析网页价格信息。
- 如何正确处理“周末”判断的时区问题。
- 如何通过 SMTP 发送富文本邮件。
- 如何用 cron、任务计划程序或常驻进程让脚本自动运行。
- 常见报错的排查思路。
2. 环境准备与整体设计
2.1 运行环境与依赖
本文示例使用 Python 3 编写,开发环境推荐 Python 3.8 及以上版本。示例代码中用到的主要依赖如下:
| 依赖库 | 用途 |
|---|---|
| requests | 请求 DeepSeek 开放平台价格页面 |
| BeautifulSoup4 | 解析 HTML 页面中的价格信息 |
| schedule | 可选的常驻定时调度(如果你不想用系统 crontab) |
| python-dotenv | 读取 .env 文件中的敏感配置 |
这些库都可以用 pip 安装:
如果你只是跑一个最简单的单文件脚本,不依赖 schedule,那实际只需要 requests 和 beautifulsoup4。版本不需要刻意固定,requests 2.x 的常见版本、BeautifulSoup4 4.x 的常见版本都能正常运行。如果后续页面的 DOM 结构变化,需要调整选择器,但依赖库本身不需要跟着升级。
2.2 项目目录结构
为了让代码清晰、可维护,我把项目拆成多个文件。你也可以把所有代码合并到一个文件里,但那样后续扩展会变麻烦。
这个结构的好处是:配置文件、邮件逻辑、监控逻辑互相独立。以后想加“企业微信通知”“钉钉通知”,只需要在通知层加一个模块,不需要改动主流程。
2.3 整体流程拆解
整个程序的运行流程可以分成五步:
- 读取配置(SMTP 账号、接收邮箱、价格页面地址等)。
- 请求 DeepSeek 价格页面,解析出当前最新价格。
- 读取本地历史价格快照,对比价格是否发生变化。
- 判断当前时间是否属于周末(这里必须注意时区问题)。
- 如果“价格有变化”并且“当前是周末”,就发送邮件,并更新本地快照。
这里有一个关键设计:邮件不是每次检查都发,而是价格发生变化时才发。如果价格没变,或者当前不是周末,程序只在日志里记录一条信息,避免重复骚扰。
3. 核心功能拆解
3.1 周末判断:时区问题不能忽略
很多人在写“周末判断”时直接写 datetime.datetime.today().weekday(),这在服务器部署时很容易踩坑。如果服务器时区是 UTC,而你在北京时间周五晚上 23:30 跑脚本,UTC 时间还是周五 15:30,weekday() 仍然是 4(周五),判断结果就会出错。反过来,周日早上 08:00 北京时间对应 UTC 周日 00:00,边界情况同样容易出错。
稳妥的做法是:强制用 zoneinfo 指定时区。Python 3.9+ 内置 zoneinfo 模块,Linux 和 macOS 通常可以直接使用。Windows 如果需要时区数据库,可以安装 tzdata 包:
判断逻辑封装成一个独立函数:
这里 weekday() 的返回值是:周一为 0,周日为 6。所以大于等于 5 就表示周六或周日。
3.2 价格获取与变动识别
DeepSeek 开放平台的计费页面会展示不同模型的输入价格、输出价格和缓存命中价格。理想情况是官网提供一个 JSON 格式的价格 API,但并不是所有平台都会公开这样的接口。因此,比较通用的做法是:
- 用 requests 请求价格页面。
- 用 BeautifulSoup 解析页面中的价格文本。
- 将“从上一次检查开始”记住的价格快照与当前解析到的价格做对比。
- 如果任意关键项发生变化,就认为“价格变动”。
考虑到官网页面结构可能调整,代码里要包含降级策略:如果页面解析失败,捕获异常并记日志,不发送邮件,防止误报。
下面是一个简化版的价格页面解析函数。实际页面结构请以你访问到的版本为准,这里的核心是提供一套解析思路: