行业资讯
📅 2026/8/1 23:44:43
OpenClaw 实战:搭建京东商品监控与简易数据分析脚本
前言做电商运营、竞品分析、选品调研的时候我们经常需要持续盯一批商品价格波动、库存变化、规格变动、销量走势。手动打开网页复制粘贴效率低还容易遗漏关键变化。最近折腾 OpenClaw 这套工具发现可以快速把商品基础信息定时拉取到本地做成轻量化监控脚本。不需要复杂爬虫框架几行代码就可以完成定时采集、数据落盘、简单分析适合个人小团队做竞品跟踪、选品复盘。注意本文仅用于技术学习使用时请遵守平台规则控制访问频率请勿高频批量抓取避免对网站造成压力。工具准备环境依赖Python3requestspandassqlite3内置pip install requests pandas我们会实现这些功能根据商品编号获取完整商品元数据标题、原价、售价、库存、SKU 规格、店铺信息、发货地等定时采集把历史价格、库存存入本地 SQLite 数据库留存变化记录简单数据分析价格变动统计、库存波动、导出 CSV 报表简易告警逻辑价格大跌 / 库存清零打印提示完整实现代码# -*- coding:utf-8 -*- import requests import time import sqlite3 import pandas as pd from datetime import datetime # --------------------------配置区域--------------------------- KEY your_key_here SECRET your_secret_here # 需要监控的商品ID列表 MONITOR_ITEM_IDS [10335871600] # 采集间隔单位秒测试不要设置过小建议至少300秒以上 FETCH_INTERVAL 600 DB_PATH ./jd_monitor.db # ------------------------------------------------------------- def init_db(): 初始化数据库存储每次采集快照 conn sqlite3.connect(DB_PATH) cur conn.cursor() cur.execute( CREATE TABLE IF NOT EXISTS item_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, num_iid TEXT, title TEXT, price REAL, original_price REAL, stock INTEGER, sales INTEGER, shop_name TEXT, location TEXT, fetch_time TIMESTAMP ) ) conn.commit() conn.close() def fetch_item_detail(num_iid): 获取单款商品完整详情数据 headers { Accept-Encoding: gzip, Connection: close } base_url https://api-gw.onebound.cn/jd/item_get_pro/ params { key: KEY, secret: SECRET, num_iid: num_iid, result_type: json, cache: no } try: resp requests.get(base_url, paramsparams, headersheaders, timeout20) resp.raise_for_status() return resp.json() except Exception as e: print(f请求异常 num_iid:{num_iid}, err:{e}) return None def save_snapshot(raw_data): 把单次采集结果写入数据库快照 if not raw_data or item not in raw_data: return item raw_data.get(item, {}) conn sqlite3.connect(DB_PATH) cur conn.cursor() cur.execute( INSERT INTO item_history (num_iid,title,price,original_price,stock,sales,shop_name,location,fetch_time) VALUES (?,?,?,?,?,?,?,?,?) , ( item.get(num_iid), item.get(title), float(item.get(price, 0)), float(item.get(orginal_price, 0)), int(item.get(num, 0)), int(item.get(sales, 0)), item.get(nick, ), item.get(location, ), datetime.now().strftime(%Y-%m-%d %H:%M:%S) )) conn.commit() conn.close() # 简单监控告警逻辑 price float(item.get(price, 0)) stock int(item.get(num, 0)) print(f【快照】{item.get(title)} | 当前价:{price} |库存:{stock} | {datetime.now()}) if stock 0: print(f⚠️警告商品 {item.get(num_iid)} 库存归零) def export_analysis_csv(): 导出历史数据做数据分析输出csv conn sqlite3.connect(DB_PATH) df pd.read_sql(SELECT * FROM item_history ORDER BY fetch_time DESC, conn) conn.close() csv_name f./item_analysis_{datetime.now().strftime(%Y%m%d_%H%M)}.csv df.to_csv(csv_name, indexFalse, encodingutf_8_sig) print(f✅分析报表导出完成{csv_name}) return df def simple_analysis(df): 简易数据分析统计价格最大最小价格变动次数库存变化 if df.empty: print(暂无采集数据) return print(\n简易分析报告) for item_id in df[num_iid].unique(): sub df[df[num_iid] item_id] min_p sub[price].min() max_p sub[price].max() latest_price sub.iloc[0][price] latest_stock sub.iloc[0][stock] record_cnt len(sub) print(f商品ID:{item_id}) print(f记录条数:{record_cnt} |历史最低:{min_p} |历史最高:{max_p} |最新价格:{latest_price} |最新库存:{latest_stock}) print(-*40) def monitor_loop(): init_db() print(开始商品监控循环按CtrlC停止程序) try: while True: for item in MONITOR_ITEM_IDS: res fetch_item_detail(item) if res: save_snapshot(res) # 每采集三轮导出一次报表可自行修改 export_analysis_csv() time.sleep(FETCH_INTERVAL) except KeyboardInterrupt: print(\n收到停止信号准备导出最终报表...) df export_analysis_csv() simple_analysis(df) print(程序退出) if __name__ __main__: monitor_loop()代码解读数据库初始化使用轻量 SQLite 保存每一轮的快照每一次拉取都作为一条历史记录后续用来回溯价格、库存变化。不需要部署 MySQL开箱即用。数据拉取函数填入你的凭证和商品编号就可以拿到商品标题、售价、原价、库存、店铺名称、发货地、SKU 规格全套信息。快照存储每次成功获取信息就写入一条记录同时内置简单告警如果库存变为 0 控制台输出提醒。报表导出与分析定时把全部历史快照导出 CSV直接可以用 Excel 打开做图表分析。脚本内置简单统计最高最低价格、记录数量、最新状态。循环监控设置间隔时间持续轮询。测试环境建议不要把间隔调太小避免触发访问限制。运行之后控制台输出示例开始商品监控循环按CtrlC停止程序 【快照】京东鲜花爱丽丝泡泡鲜切花云南鲜花家庭插花爱丽丝泡泡10枝源头直发 | 当前价:30.9 |库存:99 | 2026‑07‑31 15:22:10 ✅分析报表导出完成./item_analysis_20260731_1522.csv按下CtrlC终止脚本程序会自动导出最后一次完整分析报告打印各商品的价格区间统计。拓展玩法1. SKU 多规格监控返回结果里面自带 skus 数组可以扩展脚本把每一个子规格的价格、库存分开存入子表监控不同规格的调价、缺货。# 示例解析sku片段 skus_data raw_data[item].get(skus,{}) sku_list skus_data.get(sku,[]) for sku in sku_list: print(sku[properties_name],sku[price],sku[quantity])2. 邮件 / 企业微信告警当检测到价格暴跌、库存售罄可以增加推送逻辑把告警消息推送到企业微信机器人、邮箱不用盯着控制台。3. Pandas 做可视化导出 DataFrame 后直接用 matplotlib 绘制价格走势图把一段时间的价格波动生成图片保存适合做竞品周报素材。import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] df[fetch_time] pd.to_datetime(df[fetch_time]) plt.plot(df[fetch_time],df[price]) plt.title(商品价格监控曲线) plt.savefig(./price_trend.png)踩坑和注意事项凭证信息不要硬编码上传公开代码仓库实际项目建议放到环境变量。平台会提供缓存开关调试阶段把 cache 设置为 no 拿到实时数据日常监控打开缓存可以减少消耗。返回中的价格字段部分场景下会和页面展示存在偏差属于原始数据本身限制做分析时要留意。不要超大批量同时监控几百上千商品控制轮询间隔合理使用工具。小结借助 OpenClaw不用手写复杂解析逻辑只需要专注业务逻辑存快照、写告警、做数据分析。对于个人做竞品跟踪、选品复盘这套脚本足够轻便好用。