news 2026/3/8 18:20:53

Python实现京东商品价格监控系统:API+定时任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python实现京东商品价格监控系统:API+定时任务

你想要用 Python 搭建一套「京东商品价格监控系统」,核心是通过 API 获取商品价格,结合定时任务实现自动监控,当价格低于设定阈值时触发告警(如弹窗 / 邮件)。我会提供完整可运行的代码,涵盖「价格获取 → 定时监控 → 阈值判断 → 告警通知」全流程,兼顾新手友好性和实用性。

一、核心设计思路

  1. 技术栈requests(调用 API) +schedule(定时任务) +plyer(桌面弹窗告警) +smtplib(邮件告警);
  2. 核心流程

  3. 关键特性:支持多商品监控、价格日志记录、多重告警方式、异常自动重试。

二、前置准备

1. 安装依赖库

bash

运行

# 核心依赖:API请求 + 定时任务 + 桌面弹窗 + 邮件发送 pip install requests schedule plyer python-dotenv
2. 获取 API 密钥(聚合数据)

参考之前的步骤,关注博主领取「京东商品详情 API」的AppKey(免费试用足够新手使用)。

3. 配置文件(可选,更安全)

创建.env文件,存放敏感配置(避免硬编码):

ini

# .env 文件内容 JD_API_KEY=你的聚合数据AppKey # 邮件告警配置(可选,不用邮件则留空) EMAIL_SENDER=你的邮箱@163.com EMAIL_PASSWORD=你的邮箱授权码(非登录密码) EMAIL_RECEIVER=接收告警的邮箱@qq.com SMTP_SERVER=smtp.163.com SMTP_PORT=465

三、完整监控系统代码

python

运行

import requests import schedule import time import json import os from datetime import datetime from plyer import notification import smtplib from email.mime.text import MIMEText from email.header import Header from dotenv import load_dotenv # 加载.env配置文件 load_dotenv() # ===================== 全局配置(可根据需求修改) ===================== # API配置 JD_API_KEY = os.getenv("JD_API_KEY", "你的聚合数据AppKey") # 优先从.env读取 JD_API_URL = "https://v.juhe.cn/jd/item/detail" # 监控商品列表:{商品ID: (商品名称, 价格阈值)} MONITOR_ITEMS = { "100060195820": ("京东京造保温杯", 90.0), # 商品ID: (名称, 阈值) "100080907904": ("小米充电宝", 80.0), } # 监控频率(单位:分钟) CHECK_INTERVAL = 5 # 日志文件路径 LOG_FILE = "jd_price_monitor.log" # 邮件告警配置(从.env读取) EMAIL_CONFIG = { "sender": os.getenv("EMAIL_SENDER"), "password": os.getenv("EMAIL_PASSWORD"), "receiver": os.getenv("EMAIL_RECEIVER"), "smtp_server": os.getenv("SMTP_SERVER", "smtp.163.com"), "smtp_port": int(os.getenv("SMTP_PORT", 465)) } # ====================================================================== def get_jd_item_price(sku_id): """ 调用京东API获取商品当前价格 :param sku_id: 商品ID :return: (价格浮点数, 商品名称) 或 (None, None) """ params = { "key": JD_API_KEY, "sku_id": sku_id } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } try: response = requests.get(JD_API_URL, params=params, headers=headers, timeout=10) if response.status_code == 200: result = response.json() if result["error_code"] == 0: item_data = result["result"] price = float(item_data.get("price", 0.0)) # 转为浮点数便于比较 title = item_data.get("title", f"商品{sku_id}") return price, title else: log(f"API调用失败:{result['reason']}(商品ID:{sku_id})", level="ERROR") else: log(f"HTTP请求失败,状态码:{response.status_code}(商品ID:{sku_id})", level="ERROR") except Exception as e: log(f"获取价格异常:{str(e)}(商品ID:{sku_id})", level="ERROR") return None, None def log(content, level="INFO"): """记录监控日志""" log_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") log_content = f"[{log_time}] [{level}] {content}\n" # 打印到控制台 print(log_content.strip()) # 写入日志文件 with open(LOG_FILE, "a", encoding="utf-8") as f: f.write(log_content) def send_desktop_notification(title, message): """发送桌面弹窗告警""" try: notification.notify( title=title, message=message, app_name="京东价格监控", timeout=10 # 弹窗显示10秒 ) except Exception as e: log(f"桌面弹窗告警失败:{str(e)}", level="ERROR") def send_email_notification(item_name, current_price, threshold): """发送邮件告警(需配置邮箱信息)""" if not all([EMAIL_CONFIG["sender"], EMAIL_CONFIG["password"], EMAIL_CONFIG["receiver"]]): log("邮箱配置不完整,跳过邮件告警", level="WARNING") return try: # 构造邮件内容 subject = f"【京东价格监控】{item_name}降价啦!" body = f""" <p>商品名称:{item_name}</p> <p>当前价格:{current_price}元</p> <p>设定阈值:{threshold}元</p> <p>告警时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p> """ msg = MIMEText(body, "html", "utf-8") msg["From"] = Header(EMAIL_CONFIG["sender"], "utf-8") msg["To"] = Header(EMAIL_CONFIG["receiver"], "utf-8") msg["Subject"] = Header(subject, "utf-8") # 发送邮件 with smtplib.SMTP_SSL(EMAIL_CONFIG["smtp_server"], EMAIL_CONFIG["smtp_port"]) as server: server.login(EMAIL_CONFIG["sender"], EMAIL_CONFIG["password"]) server.sendmail(EMAIL_CONFIG["sender"], EMAIL_CONFIG["receiver"], msg.as_string()) log(f"邮件告警发送成功(接收人:{EMAIL_CONFIG['receiver']})") except Exception as e: log(f"邮件告警失败:{str(e)}", level="ERROR") def check_price(): """价格检查核心逻辑""" log("开始执行价格检查任务") for sku_id, (item_name, threshold) in MONITOR_ITEMS.items(): # 获取当前价格 current_price, real_item_name = get_jd_item_price(sku_id) if current_price is None: continue # 获取价格失败,跳过 # 记录当前价格 log(f"{real_item_name} 当前价格:{current_price}元(阈值:{threshold}元)") # 判断是否低于阈值 if current_price < threshold: alert_msg = f"{real_item_name} 当前价格{current_price}元,低于设定阈值{threshold}元!" log(alert_msg, level="ALERT") # 触发告警 send_desktop_notification("价格告警", alert_msg) send_email_notification(real_item_name, current_price, threshold) log("价格检查任务执行完成") def run_monitor(): """启动监控系统""" log("===== 京东价格监控系统启动 =====") log(f"监控商品数量:{len(MONITOR_ITEMS)}") log(f"检查频率:每{CHECK_INTERVAL}分钟") # 立即执行一次检查 check_price() # 配置定时任务 schedule.every(CHECK_INTERVAL).minutes.do(check_price) # 持续运行 while True: schedule.run_pending() time.sleep(60) # 每秒检查一次定时任务 if __name__ == "__main__": try: run_monitor() except KeyboardInterrupt: log("===== 京东价格监控系统手动停止 =====") except Exception as e: log(f"监控系统异常退出:{str(e)}", level="CRITICAL")

四、代码核心说明

1. 关键功能模块

表格

函数作用核心亮点
get_jd_item_price获取商品价格异常捕获 + 结果校验,失败返回 None,不影响整体监控
log日志记录控制台 + 文件双输出,便于排查问题
send_desktop_notification桌面弹窗跨平台支持(Windows/macOS/Linux),无需额外配置
send_email_notification邮件告警支持 SSL 加密,配置灵活,缺省则自动跳过
check_price价格检查遍历所有监控商品,阈值判断 + 告警触发
run_monitor启动监控立即执行 + 定时任务,持续运行不中断
2. 新手必改配置
  1. MONITOR_ITEMS:替换为你要监控的商品 ID、名称和价格阈值;
  2. CHECK_INTERVAL:修改监控频率(建议≥5 分钟,避免 API 调用超限);
  3. .env文件:填写 API 密钥和邮箱信息(邮件告警需配置)。
3. 避坑要点
  • API 调用限制:聚合数据免费版有调用次数限制(约 100 次 / 天),建议频率≥5 分钟;
  • 邮箱授权码:不是登录密码,需在邮箱设置中开启 SMTP 并生成授权码(如 163 邮箱);
  • 商品 ID 提取:从京东商品 URL 中提取(如https://item.jd.com/100060195820.html中的100060195820);
  • 价格格式:API 返回的价格是字符串,代码中已转为浮点数,避免字符串比较错误。

五、运行与使用

1. 直接运行

bash

运行

python jd_price_monitor.py

运行后效果:

plaintext

[2026-02-10 15:30:00] [INFO] ===== 京东价格监控系统启动 ===== [2026-02-10 15:30:00] [INFO] 监控商品数量:2 [2026-02-10 15:30:00] [INFO] 检查频率:每5分钟 [2026-02-10 15:30:00] [INFO] 开始执行价格检查任务 [2026-02-10 15:30:01] [INFO] 京东京造保温杯 当前价格:89.9元(阈值:90.0元) [2026-02-10 15:30:01] [ALERT] 京东京造保温杯 当前价格89.9元,低于设定阈值90.0元! [2026-02-10 15:30:01] [INFO] 邮件告警发送成功(接收人:xxx@qq.com) [2026-02-10 15:30:02] [INFO] 小米充电宝 当前价格:85.0元(阈值:80.0元) [2026-02-10 15:30:02] [INFO] 价格检查任务执行完成
2. 后台运行(Windows)

创建start.bat文件,实现后台运行(关闭窗口不停止):

bat

@echo off pythonw jd_price_monitor.py exit

六、进阶优化(可选)

  1. 多线程监控:每个商品单独线程获取价格,提升效率(适合监控大量商品);
  2. 价格趋势记录:将每次价格存入 CSV / 数据库,生成价格走势图;
  3. 配置热更新:无需重启程序,修改MONITOR_ITEMS即可生效;
  4. 钉钉 / 微信告警:对接钉钉机器人 / 企业微信,实现即时通讯告警;
  5. 失败重试:获取价格失败时,自动重试 1-2 次,避免漏检。

总结

  1. 核心逻辑:通过schedule实现定时任务,调用京东 API 获取价格,阈值判断后触发弹窗 / 邮件告警;
  2. 关键配置:修改MONITOR_ITEMS添加监控商品,配置.env文件填写 API 密钥和邮箱信息;
  3. 稳定性保障:完善的日志记录 + 异常捕获,即使单个商品获取失败,不影响整体监控;
  4. 易用性:新手只需修改少量配置即可运行,支持桌面 / 邮件双重告警,满足日常监控需求。

这套系统完全适配个人用户的价格监控需求,代码结构清晰,可根据自身需求灵活扩展功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 3:14:54

赶due救急必备,8款AI降AIGC率实测!

哈喽&#xff0c;大家好&#xff01;我是小李&#xff08;自称老李也行&#xff0c;毕竟32岁了&#xfffd;&#xfffd;&#xff09;。今天咱们来聊聊一个火爆话题——论文被AI检测卡住了&#xff1f;别慌&#xff01;我亲身体验了8款AI工具&#xff0c;帮你赶due救急&#xf…

作者头像 李华
网站建设 2026/3/3 10:00:12

能源管理AI优化:从POC到规模化应用的完整路径

能源管理AI优化&#xff1a;从POC到规模化应用的完整路径 一、引入与连接&#xff1a;从“困惑”到“破局”的起点 深夜十点&#xff0c;老张盯着电脑上的能源账单&#xff0c;眉头拧成了结。作为某制造企业的能源经理&#xff0c;他每个月都要面对一个无解的难题——工厂的电费…

作者头像 李华
网站建设 2026/2/16 12:52:41

深圳众擎机器人开启全球首个双足机器人格斗联赛URKL:140万美元金腰带背后,双足格斗如何改写机器人行业未来?

摘要&#xff1a;当多数双足机器人企业仍在实验室打磨平衡与运动控制技术时&#xff0c;EngineAI&#xff08;深圳众擎机器人&#xff09;走出了一条极具冲击力的差异化路线——从全网爆红的格斗演示&#xff0c;正式落地全球首个商业化双足机器人格斗联赛URKL&#xff08;终极…

作者头像 李华
网站建设 2026/2/24 5:33:36

瑞幸咖啡 x 阿里云合作共创:AI 推荐让瑞幸咖啡“更懂你

在新零售不断演进的今天&#xff0c;用户走进瑞幸&#xff0c;要的不只是咖啡&#xff0c;更是一种“被真正理解”的体验——口味、习惯、场景&#xff0c;甚至那一刻的心情。作为国内领先的连锁咖啡品牌&#xff0c;瑞幸咖啡正从数字化迈入智能化新阶段&#xff0c;以人工智能…

作者头像 李华
网站建设 2026/2/27 1:19:22

医院电子病历如何用TinyMCE处理PDF签名跨平台Word导入?

集团 Word 导入产品项目全纪实&#xff1a;从寻觅到落地攻坚 需求初现&#xff1a;多行业适配的挑战 作为集团旗下软件子公司的项目负责人&#xff0c;我深知此次任务的复杂性与紧迫性。集团业务广泛&#xff0c;旗下多个子公司服务于教育、政府、银行等多个关键行业。集团总…

作者头像 李华
网站建设 2026/2/27 1:27:02

PostgreSQL:详解如何搭建流复制集群

文章目录一、前置知识1.1 流复制原理1.2 架构说明二、环境准备2.1 系统要求2.2 节点信息示例三、安装 PostgreSQL四、配置主节点&#xff08;Primary&#xff09;4.1 修改 postgresql.conf4.2 配置 pg_hba.conf4.3 创建复制用户4.4 重启主库五、配置备节点&#xff08;Standby&…

作者头像 李华