影刀RPA数据采集实战:京东商品价格监控系统
·
影刀RPA数据采集实战:京东商品价格监控系统
作者:林焱 | 适合人群:有一定基础的RPA学员 | 预计阅读时间:18分钟
前言
价格监控是电商从业者最常见的需求之一。手动查价既费时又容易遗漏,而用影刀RPA搭建一套全自动价格监控系统,只需一次配置,之后永久自动运行。
本文从零开始,带你完成:
- ✅ 多商品价格自动采集
- ✅ 价格变化检测与记录
- ✅ 降价自动微信/钉钉推送
- ✅ 每日价格趋势报告生成
一、需求分析与系统设计
用户故事
作为电商运营,我需要:
- 监控自家店铺20款竞品的价格
- 当竞品降价超过5%时,立刻收到通知
- 每天生成一份价格趋势报告

系统架构
┌──────────────────────────────────────────────────┐
│ 价格监控系统 │
│ │
│ 📋 商品配置Excel → 读取监控清单 │
│ ↓ │
│ 🌐 浏览器 → 采集各商品当前价格 │
│ ↓ │
│ 📊 数据比对 → 与历史价格对比 │
│ ↓ │
│ 🔔 降价判断 → 超阈值 → 推送通知 │
│ ↓ │
│ 📁 写入历史数据库(Excel/SQLite) │
│ ↓ │
│ 📈 生成趋势报告 → 邮件发送 │
│ ↓ │
│ ⏰ 定时循环(每2小时执行一次) │
└──────────────────────────────────────────────────┘
拼多多店群自动化报活动上架!
二、商品配置文件设计
新建config.xlsx,包含以下列:
| 商品ID | 商品名称 | 商品URL | 降价阈值(%) | 是否启用 | 上次价格 |
|---|---|---|---|---|---|
| P001 | 华为手机A | https://item.jd.com/xxxx.html | 5 | 是 | 2999 |
| P002 | 苹果耳机B | https://item.jd.com/yyyy.html | 3 | 是 | 999 |
![]() |
| P003 | 小米平板C | https://item.jd.com/zzzz.html | 10 | 否 | 1599 |
三、完整流程代码
模块1:读取商品配置
# 读取配置Excel
打开Excel("config.xlsx")
all_config = 读取全部数据(包含表头=True)
headers = all_config[0]
products = []
For row in all_config[1:]:
if row[4] == "是": # 只处理"启用"的商品
products.append({
"id": row[0],
"name": row[1],
"url": row[2],
"threshold": float(row[3]),
"last_price": float(row[5]) if row[5] else None
})
print(f"共加载 {len(products)} 个监控商品")
模块2:采集京东价格
def get_jd_price(url):
"""
采集京东商品当前价格
返回: float 价格,失败返回 None
"""
Try:
打开浏览器(url, 隐藏=True) # 无头模式
# 等待价格元素加载
等待元素出现(".p-price .price", 超时=10)
# 获取价格文本
price_text = 获取元素文本(".p-price .price")
# 清理非数字字符,转为浮点数

price = float(price_text.replace("¥", "").replace(",", "").strip())
关闭浏览器()
return price
Catch (超时错误):
写入日志(f"页面加载超时: {url}")
关闭浏览器()
return None
Catch (元素不存在):
写入日志(f"价格元素未找到: {url}")
关闭浏览器()
return None
模块3:价格对比与告警
alerts = [] # 告警列表
For product in products:
current_price = get_jd_price(product["url"])
if current_price is None:
continue
last_price = product["last_price"]
product_name = product["name"]
# 记录当前价格
更新配置Excel(product["id"], "当前价格", current_price)
写入价格历史(product["id"], current_price, 当前时间)
# 对比价格
if last_price is not None and last_price > 0:
change_rate = (last_price - current_price) / last_price * 100
if change_rate >= product["threshold"]:
# 降价超过阈值!触发告警
alert = {
"name": product_name,
"last": last_price,
"current": current_price,
"drop": change_rate,
"url": product["url"]
}
alerts.append(alert)
写入日志(f"⚠️ 降价告警:{product_name} 降价{change_rate:.1f}%")
elif change_rate < -5:
# 涨价超过5%,记录不告警
写入日志(f"📈 涨价:{product_name} 涨价{-change_rate:.1f}%")
# 更新"上次价格"
更新配置Excel(product["id"], "上次价格", current_price)
# 避免频繁请求被封,每个商品间隔2-5秒
随机等待(2000, 5000)
模块4:发送降价通知
if len(alerts) > 0:
# 构造通知内容
msg_lines = ["🎉 **价格降低告警**\n"]
For alert in alerts:
msg_lines.append(
f"📦 **{alert['name']}**\n"
f" 原价:¥{alert['last']:,.0f}\n"
f" 现价:¥{alert['current']:,.0f}\n"
f" 降幅:🔴 **{alert['drop']:.1f}%**\n"
f" 链接:{alert['url']}\n"
)
msg = "\n".join(msg_lines)
# 发送到钉钉群
钉钉Webhook推送(
token="YOUR_WEBHOOK_TOKEN",
消息类型="markdown",
标题="价格降低告警",
内容=msg
)
# 同时发送邮件
发送邮件(
收件人="team@company.com",
主题=f"价格告警 - {len(alerts)}个商品降价 [{今日日期}]",
正文=msg,
正文格式="markdown"
)
模块5:生成每日趋势报告
def generate_daily_report():
"""每天晚上8点生成价格趋势报告"""
# 从历史数据库读取今日数据
今日数据 = 查询价格历史(日期=今日日期)
# 统计
涨价商品 = [p for p in 今日数据 if p["变化"] > 0]
降价商品 = [p for p in 今日数据 if p["变化"] < 0]
无变化商品 = [p for p in 今日数据 if p["变化"] == 0]
# 生成Excel报告
wb = 创建Excel()
# Sheet1:今日概况
概况数据 = [
["统计项", "数量"],
["监控商品总数", len(今日数据)],
["今日降价", len(降价商品)],
["今日涨价", len(涨价商品)],
["价格未变", len(无变化商品)],
]
写入Sheet(wb, "今日概况", 概况数据)
# Sheet2:降价商品详情(按降幅排序)
降价商品.sort(key=lambda x: x["变化"]) # 降幅从大到小
写入Sheet(wb, "降价商品", 降价商品)
# Sheet3:价格趋势图(最近7天)
For product in products[:10]: # 最多展示前10个商品
七日数据 = 查询最近7天价格(product["id"])
添加趋势图(wb, f"{product['name']}_趋势", 七日数据)
保存Excel(wb, f"价格报告_{今日日期}.xlsx")
# 发邮件
发送邮件(
收件人="boss@company.com",
主题=f"商品价格日报 - {今日日期}",
正文=f"今日共监控{len(今日数据)}个商品,{len(降价商品)}个降价,请查看附件。",
附件=[f"价格报告_{今日日期}.xlsx"]
)

四、反爬虫应对策略
京东有一定的反爬机制,需要注意以下几点:
策略1:随机请求间隔
import random
# 每次请求后等待随机时间(2-8秒)
等待时间 = random.uniform(2, 8)
等待(等待时间 * 1000)
策略2:使用真实浏览器而非HTTP请求
影刀RPA直接控制Chrome浏览器,京东看到的是正常浏览器行为,比Python requests更难被识别。

策略3:绕过登录墙
京东部分价格需要登录才能看到(会员价/Plus价),需要先登录:
# 先检查是否已登录
if 元素是否存在(".nickname"):
print("已登录")
else:
打开页面("https://passport.jd.com/new/login.aspx")
输入账号()
输入密码()
点击登录()
处理滑块验证() # 如果有的话
等待登录完成()
策略4:IP被封时的处理
Catch (访问被拒绝错误):
写入日志("IP可能被限制,等待30分钟后重试")
等待(30 * 60 * 1000) # 等待30分钟
重试当前商品()

五、数据存储方案选择
TEMU店群矩阵自动化运营核价报活动
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Excel | 直观,可视化 | 数据量大时慢 | <10000条数据 |
| SQLite | 查询快,零配置 | 不能多进程写 | 中等数据量 |
| MySQL | 高性能,多并发 | 需要安装配置 | 大量数据,多用户 |
推荐:SQLite(适合个人/小团队使用)
import sqlite3
# 创建数据库和表
conn = sqlite3.connect("price_history.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS price_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
product_id TEXT,
product_name TEXT,
price REAL,
record_time DATETIME DEFAULT CURRENT_TIMESTAMP,
change_rate REAL
)
""")
conn.commit()

六、定时任务设置
在影刀中设置定时执行:
任务名:商品价格监控
执行频率:每2小时执行一次
执行时间:00:00, 02:00, 04:00, 06:00, 08:00, 10:00, 12:00, 14:00, 16:00, 18:00, 20:00, 22:00
特别设置:每天晚上20:00,执行完采集后额外执行生成日报子流程
七、运行效果展示
[2026-06-10 08:00:01] 开始执行价格监控任务
[2026-06-10 08:00:03] 已加载 20 个监控商品
[2026-06-10 08:00:15] 商品P001 华为手机A: ¥2799(↓6.7%,原价¥2999)⚠️触发告警
[2026-06-10 08:00:23] 商品P002 苹果耳机B: ¥999(持平)
[2026-06-10 08:00:31] 商品P003 小米平板C(已禁用,跳过)
...
[2026-06-10 08:03:45] 采集完成,共20个商品

[2026-06-10 08:03:46] 本次共发现3个降价告警
[2026-06-10 08:03:48] 告警已发送到钉钉群
[2026-06-10 08:03:49] 价格历史已写入数据库
[2026-06-10 08:03:50] 本次任务执行完毕(耗时3分49秒)
总结
本文构建了一个完整的商品价格监控系统:
- 配置化 — Excel配置文件,无需修改代码即可调整监控商品
- 自动化 — 定时执行,全程无需人工干预
- 智能告警 — 降价超阈值立即推送通知
- 数据积累 — 历史价格入库,支持趋势分析
- 报告输出 — 每日自动生成Excel趋势报告
这套系统可以扩展到淘宝、天猫、拼多多等平台,只需修改采集模块中的URL和CSS选择器。
📝 本文作者:林焱 | 专注影刀RPA教程与自动化实战
更多推荐





所有评论(0)