×

api 数据挖掘

告别人工盯品!Open Claw 轻量化搭建京东商品 7×24 小时监控与数据分析系统(完整可运行 Python 源码)

admin admin 发表于2026-08-11 15:58:08 浏览8 评论0

抢沙发发表评论

一、前言:电商人每天都在踩的数据痛点

不管是自营店铺运营、无货源铺货卖家,还是市场竞品分析师,日常都绕不开一件事:盯商品。

手动打开页面反复刷新记录价格、库存、规格、销量,有几个无法解决的硬伤:

  1. 信息滞后:竞品半夜调价、库存清空、上新促销,等第二天上班才发现,错失运营窗口期;

  2. 数据零散:历史价格、多规格 SKU、店铺信息分散在不同截图、Excel,无法做趋势对比;

  3. 人力成本高:批量监控几十上百款竞品,专人全天值守完全不现实;

  4. 抓取不稳定:传统页面解析方案极易触发平台风控,频繁出现访问限制、IP 封禁。

我之前尝试过页面自动化工具、自研解析脚本,要么三天两头失效,要么并发一多直接被限制访问。直到用上一站式数据通道,只需要输入商品唯一编号,就能一次性拉取全维度结构化商品信息,不用处理页面渲染、Cookie、反爬校验,几十行代码就能落地一套自动采集 - 数据存储 - 异动预警 - 趋势分析闭环系统,新手复制代码改配置就能直接跑通。

本文完整拆解整套落地流程,包含可直接运行的 Python 源码,实现功能:

  • 批量监控多款京东商品,定时自动拉取实时数据;

  • 自动保存历史价格、库存、SKU、销量、店铺信息至本地表格;

  • 自定义阈值触发预警:降价、库存不足、销量暴涨实时提示;

  • 基础数据分析:单商品价格走势、多竞品横向数据对比;

  • 轻量化部署,Windows/Mac/ 云服务器通用,无需重型数据库。

二、方案整体架构说明

整套系统分为四大模块,全程自动化循环执行,无需人工干预:

  1. 稳定数据采集层 依托 Open Claw 标准化数据通道,输入商品 ID 即可返回结构化 JSON 数据,涵盖标题、原价、实时售价、全部 SKU 规格、库存、品牌、发货地、店铺详情、商品图集等全字段,规避页面解析的反爬风险,支持缓存加速,大幅提升采集速度。

  2. 本地持久化存储层 采用 Pandas+Excel 本地文件存储,每次采集自动追加时间戳,留存完整时序数据,不用安装 MySQL、MongoDB,打开表格就能查看历史全部记录,方便后续导出做报表。

  3. 异动识别预警层 每次采集完成后自动对比上一轮存储的历史数据,自定义价格波动比例、库存预警线、销量增长阈值,触发条件后控制台高亮输出提醒,可拓展对接钉钉、企业微信、邮箱推送消息。

  4. 智能数据分析层 封装统计函数,一键生成单商品 7 日价格波动报表、多款竞品横向对比表,快速筛选低价高库存潜力款、持续降价竞品,给选品、调价运营提供数据支撑。

三、环境准备与前置配置

1. 依赖库安装

打开终端执行命令,安装运行所需第三方工具:

pip install requests pandas schedule openpyxl
  • requests:网络请求工具,用于对接数据通道拉取商品信息;

  • pandas/openpyxl:表格读写,实现数据本地持久化;

  • schedule:定时任务框架,实现循环自动监控。

2. 前置账号配置说明

登录后台,创建数据采集应用,获取两组凭证:

  • 访问密钥标识(下文代码KEY

  • 安全校验密钥(下文代码SECRET) 同时准备需要监控的京东商品 ID(商品详情页链接末尾一串数字,即唯一编号)。

四、完整可运行 Python 源码

4.1 完整监控 + 采集 + 预警 + 数据分析一体化脚本

# -*- coding: utf-8 -*-
import requests
import json
import time
import schedule
import pandas as pd
from datetime import datetime

# ====================== 【配置区,自行修改】 ======================
APP_KEY = "你的OpenClaw访问密钥"
APP_SECRET = "你的OpenClaw安全密钥"
# 待监控商品ID列表,可批量新增多个商品
MONITOR_GOODS_ID = [
    "10335871600",
    "10057467958584"
]
# 监控参数自定义
PRICE_ALERT_RATE = 0.15  # 价格跌幅超过15%触发降价预警
STOCK_ALERT_NUM = 30     # 库存低于30触发库存预警
SALE_ALERT_INCREMENT = 200  # 单次销量增长200触发爆款预警
CHECK_INTERVAL_MIN = 30  # 每30分钟自动巡检一次
# 本地存储文件名称
SAVE_EXCEL_NAME = "京东商品监控历史数据.xlsx"
# =================================================================

def get_goods_detail(goods_id):
    """
    调用Open Claw通道获取京东商品完整详情数据
    :param goods_id: 商品唯一ID
    :return: 结构化商品字典 / None(获取失败)
    """
    gateway_url = "https://api-gw.onebound.cn/jd/item_get_pro"
    params = {
        "key": APP_KEY,
        "secret": APP_SECRET,
        "num_iid": goods_id,
        "cache": "yes",
        "result_type": "json"
    }
    try:
        resp = requests.get(url=gateway_url, params=params, timeout=12)
        resp_data = resp.json()
        # 判断是否成功返回商品数据
        if resp_data.get("error_code") != "0000":
            print(f"【采集失败】商品{goods_id},错误提示:{resp_data.get('reason')}")
            return None
        item_info = resp_data.get("item", {})
        # 提取核心字段,整理成标准化字典
        standard_data = {
            "crawl_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "goods_id": goods_id,
            "title": item_info.get("title", ""),
            "brand": item_info.get("brand", ""),
            "current_price": float(item_info.get("price", 0)),
            "original_price": float(item_info.get("orginal_price", 0)),
            "total_stock": int(item_info.get("num", 0)),
            "sales_volume": int(item_info.get("sales", 0)),
            "shop_name": item_info.get("seller_info", {}).get("shop_name", ""),
            "location": item_info.get("location", ""),
            "detail_link": item_info.get("detail_url", "")
        }
        return standard_data
    except Exception as e:
        print(f"【网络异常】商品{goods_id},异常信息:{str(e)}")
        return None

def save_data_to_excel(data_list):
    """将采集到的数据追加保存至本地Excel"""
    new_df = pd.DataFrame(data_list)
    # 判断文件是否存在,不存在则新建,存在则追加写入
    try:
        old_df = pd.read_excel(SAVE_EXCEL_NAME)
        merge_df = pd.concat([old_df, new_df], ignore_index=True)
    except FileNotFoundError:
        merge_df = new_df
    merge_df.to_excel(SAVE_EXCEL_NAME, index=False)
    print(f"✅ 本次采集{len(data_list)}款商品数据,已保存至本地表格")

def check_data_warning(new_data, history_df):
    """对比历史数据,检测价格、库存、销量异动,输出预警"""
    goods_id = new_data["goods_id"]
    goods_title = new_data["title"]
    # 筛选该商品上一次采集的历史记录
    goods_history = history_df[history_df["goods_id"] == goods_id]
    if len(goods_history) < 1:
        print(f"ℹ️ 商品{goods_title}暂无历史数据,本次仅存档,不触发对比")
        return
    last_record = goods_history.iloc[-1]
    # 1. 价格异动检测
    price_drop_rate = (last_record["current_price"] - new_data["current_price"]) / last_record["current_price"]
    if price_drop_rate >= PRICE_ALERT_RATE:
        print(f"\033[31m🔴 降价预警 | {goods_title}\033[0m")
        print(f"历史售价:{last_record['current_price']}元 | 当前售价:{new_data['current_price']}元 | 降幅{round(price_drop_rate*100,2)}%")
    # 2. 库存预警
    if new_data["total_stock"] < STOCK_ALERT_NUM:
        print(f"\033[33m🟠 库存预警 | {goods_title}\033[0m")
        print(f"当前剩余库存:{new_data['total_stock']}件,低于警戒值{STOCK_ALERT_NUM}")
    # 3. 销量暴涨预警
    sale_grow = new_data["sales_volume"] - last_record["sales_volume"]
    if sale_grow >= SALE_ALERT_INCREMENT:
        print(f"\033[32m🟢 爆款预警 | {goods_title}\033[0m")
        print(f"新增销量:{sale_grow},短期流量爆发,可重点跟进")

def goods_data_analysis():
    """简易数据分析函数:输出7日内价格波动、竞品对比简报"""
    try:
        df = pd.read_excel(SAVE_EXCEL_NAME)
        df["crawl_time"] = pd.to_datetime(df["crawl_time"])
        seven_day_data = df[df["crawl_time"] >= pd.Timestamp.now() - pd.Timedelta(days=7)]
        print("\n===================== 7日商品数据分析简报 =====================")
        # 按商品分组统计均价、最低价、总销量
        analysis_result = seven_day_data.groupby(["goods_id", "title"]).agg(
            avg_price=("current_price", "mean"),
            min_price=("current_price", "min"),
            latest_stock=("total_stock", "last"),
            total_sales=("sales_volume", "last")
        ).reset_index()
        print(analysis_result.to_string(index=False))
        print("================================================================\n")
    except FileNotFoundError:
        print("暂无历史监控数据,采集一轮后即可生成分析报表")

def monitor_task():
    """单次定时监控主任务"""
    print(f"\n===== {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 启动自动巡检 =====")
    collect_data = []
    # 遍历所有待监控商品,采集数据
    for gid in MONITOR_GOODS_ID:
        item_data = get_goods_detail(gid)
        if item_data:
            collect_data.append(item_data)
    if len(collect_data) == 0:
        print("本次未采集到有效商品数据,等待下一轮巡检")
        return
    # 保存数据到表格
    save_data_to_excel(collect_data)
    # 读取历史数据,触发异动预警
    history_data = pd.read_excel(SAVE_EXCEL_NAME)
    for item in collect_data:
        check_data_warning(item, history_data)
    # 执行数据分析,输出简报
    goods_data_analysis()
    print(f"===== 本轮巡检完成,{CHECK_INTERVAL_MIN}分钟后自动执行下一轮 =====\n")

if __name__ == "__main__":
    # 配置定时循环任务
    schedule.every(CHECK_INTERVAL_MIN).minutes.do(monitor_task)
    print(f"系统启动成功!监控商品总数:{len(MONITOR_GOODS_ID)},巡检间隔:{CHECK_INTERVAL_MIN}分钟")
    print("等待首次巡检执行...\n")
    # 持续循环运行定时任务
    while True:
        schedule.run_pending()
        time.sleep(10)

4.2 代码核心功能拆解说明

  1. 数据采集函数get_goods_detail 统一封装数据通道请求逻辑,自动校验返回状态,过滤无效报错,把平台原始多层嵌套 JSON,整理成扁平化标准化字段,方便后续存储、对比、分析。同时支持缓存加速,重复采集同一商品无需重复拉取源站数据,提升效率。

  2. 本地存储函数save_data_to_excel 无需数据库,直接读写 Excel 文件,每次采集自动追加记录,每条数据绑定采集时间戳,完整留存时序数据,运营人员可以直接打开表格筛选、做透视表、绘制价格趋势图。

  3. 异动预警check_data_warning 自动读取上一轮采集记录,分别计算价格跌幅、库存余量、销量增量,达到自定义阈值后控制台用彩色文字高亮提醒,可自行拓展对接第三方消息推送接口,实现微信 / 钉钉实时推送告警。

  4. 数据分析goods_data_analysis 自动筛选近 7 天全部监控数据,按商品分组计算平均售价、历史最低价、当前库存、累计销量,一键输出竞品对比简报,快速筛选降价多、销量暴涨、库存告急的商品,支撑选品与调价决策。

  5. 定时任务循环monitor_task 基于 schedule 实现无人值守循环巡检,自定义巡检间隔,程序后台持续运行,云服务器部署后可 7×24 小时不间断监控,无需人工手动执行。

五、落地实操步骤

步骤 1:修改配置参数

打开代码顶部【配置区】,替换为自己的 Open Claw 密钥、填入需要监控的京东商品 ID,按需调整预警阈值、巡检间隔。

步骤 2:运行脚本

终端进入代码文件所在目录,执行:

python jd_goods_monitor.py

程序启动后会自动等待,到达设定间隔自动执行一轮采集、存储、预警、分析全流程。

步骤 3:查看监控结果

  1. 本地目录自动生成京东商品监控历史数据.xlsx,所有历史采集记录永久保存;

  2. 控制台实时输出每轮采集日志,出现价格、库存、销量异动会高亮提醒;

  3. 每轮巡检结束自动打印 7 日数据分析简报,直观查看竞品整体走势。

六、场景拓展与优化方案

1. 拓展消息推送(钉钉 / 企业微信)

在预警函数中新增 webhook 请求,触发异动时自动推送消息到工作群,不用一直盯着控制台。

2. 批量导入商品 ID

支持读取 Excel 批量商品清单,无需手动在代码里新增 ID,适合监控上百款竞品的店铺。

3. 可视化价格曲线

结合 Matplotlib 绘制单商品历史价格走势图,导出图片用于周报、运营复盘。

4. 服务器后台常驻运行

Linux 云服务器搭配 nohup 命令,后台持续执行脚本,关闭终端也不会中断监控任务。

5. SKU 精细化监控

源码仅提取商品整体数据,可扩展解析返回内容中的 SKU 列表,单独监控每个规格的独立售价、库存,适合多规格服饰、家电类商品。

七、方案优势总结

  1. 稳定可靠,规避风控 不依赖页面渲染解析,标准化结构化数据返回,不会出现页面改版失效、IP 封禁问题,长期运行零维护;

  2. 轻量化低成本 无需搭建数据库、爬虫集群,个人电脑即可运行,数据通道按量计费,对比商用监控工具成本大幅降低;

  3. 全链路自动化 采集 - 存档 - 预警 - 分析一套代码完成,解放人工盯品时间,重点关注系统推送的异动信息即可;

  4. 高度自定义 巡检频率、预警阈值、存储方式均可自行修改,适配无货源、自营店铺、市场调研等不同业务需求;

  5. 易二次开发 代码分层清晰,采集、存储、预警、分析模块完全解耦,可快速拓展铺货、报表导出、价格对标等功能。

八、写在最后

对于电商从业者、数据开发新手来说,这套方案完美平衡开发成本与实用价值。不用深入学习页面逆向、反爬对抗相关复杂知识,依托成熟稳定的数据通道,几十行代码就能搭建一套完整的商品情报监控系统。

如果你需要拓展批量导入商品、钉钉消息推送、价格可视化图表等功能,可以基于本文源码快速二次改造,整套系统部署完成后,只需要定期查看预警简报与历史数据表格,就能精准掌握竞品全时段动态,抢占运营先机。


少长咸集

群贤毕至

访客