×

api 数据挖掘

告别人工盯品!Open Claw 一站式搭建京东商品全自动监控与数据分析系统(完整可运行代码)

admin admin 发表于2026-08-17 10:45:29 浏览7 评论0

抢沙发发表评论

前言

做电商运营、竞品调研、渠道选品的朋友应该都有同款痛点: 需要持续盯几十上百款竞品,每天手动刷新页面记录价格、库存、活动、规格变动,一旦遇到大促、限时降价、库存清仓,错过调价窗口期直接损失利润;手动统计数据还容易出现错漏,历史价格、销量趋势无法留存,很难做长期市场分析。

早期尝试过模拟浏览器自动化页面抓取,却频繁遇到验证码、访问限流、页面改版失效、动态渲染解析失败等问题,维护成本极高。后来接触到 Open Claw 数据处理工具,无需复杂页面解析、不用处理反爬拦截,短短几十行代码就能稳定拉取全量商品结构化数据,配合定时任务、数据清洗、异常预警,一套轻量化竞品监控分析系统直接落地。

本文完整分享从工具配置、数据拉取、定时监控、异常预警、数据分析可视化全流程,所有代码可直接复制运行,适配个人运营、小型商家、数据分析师日常使用。

一、方案优势对比

传统页面抓取方案痛点

  1. 平台反爬严格,频繁触发滑块、验证码,需要额外接入打码服务;

  2. 页面前端改版后,DOM 解析规则全部失效,需要反复改代码;

  3. 并发采集极易被限制 IP,必须采购代理 IP 池增加成本;

  4. 动态渲染商品规格、销量、店铺信息解析难度大,字段缺失严重;

  5. 无缓存机制,重复采集耗时久,大批量商品监控效率极低。

Open Claw 方案核心优势

  1. 底层封装平台数据解析逻辑,页面改版无需修改业务代码;

  2. 内置智能缓存机制,重复查询优先读取缓存,大幅降低请求消耗;

  3. 自动处理规格、多图、店铺、促销、库存全维度结构化数据;

  4. 自带异常识别,商品下架、参数错误、访问异常统一返回标识;

  5. 支持多语言、多格式输出,原生适配 Python、Java、C#、Node 等主流开发语言;

  6. 低维护成本,仅需维护商品 ID 清单,业务逻辑一次编写长期可用。

二、环境准备

依赖安装

基于 Python 实现完整监控脚本,安装必备工具库:

pip install requests pandas matplotlib openpyxl

工具权限配置

  1. 注册获取专属密钥凭证(后文代码中KEYSECRET 替换为自己的凭证);

  2. 确认账户可用额度充足,商品正常查询会消耗额度,商品下架、参数错误等异常查询不计消耗;

  3. 整理需要监控的京东商品数字 ID(商品详情页链接末尾一串数字即为商品 ID)。

三、完整实战代码(分四大模块)

模块 1:基础商品数据拉取函数

负责通过 Open Claw 拉取单款商品全量结构化信息,统一格式化返回,内置异常捕获处理。

import requests
import json
import time
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt

# ========== 基础配置区(自行修改) ==========
CLAW_KEY = "你的专属密钥1"
CLAW_SECRET = "你的专属密钥2"
# 需要监控的商品ID列表
MONITOR_GOODS_IDS = ["10335871600", "10057467958584"]
# 轮询监控间隔(单位:秒,普通商品建议300秒,爆款60秒)
POLL_INTERVAL = 300
# 降价预警阈值,0.2代表降价幅度超过20%触发提醒
PRICE_ALERT_THRESHOLD = 0.2
# 历史数据存储文件
DATA_SAVE_PATH = "jd_goods_monitor_data.xlsx"
# ==========================================

def fetch_goods_info(goods_id: str):
    """
    通过Open Claw工具获取京东商品完整结构化数据
    :param goods_id: 商品数字ID
    :return: 格式化商品字典 / None(查询失败)
    """
    # 工具请求基础参数
    req_params = {
        "key": CLAW_KEY,
        "secret": CLAW_SECRET,
        "num_iid": goods_id,
        "result_type": "json",
        "cache": "yes",
        "lang": "cn"
    }
    headers = {
        "Accept-Encoding": "gzip",
        "Connection": "close"
    }
    try:
        resp = requests.get(
            url="https://工具网关地址/jd/item_detail",
            params=req_params,
            headers=headers,
            timeout=15
        )
        resp_json = resp.json()
        # 判断查询异常
        if resp_json.get("error_code") != "0000":
            print(f"【异常】商品{goods_id}查询失败:{resp_json.get('reason')}")
            return None
        item_data = resp_json.get("item", {})
        if not item_data:
            print(f"【异常】商品{goods_id}无返回数据")
            return None
        
        # 提取核心基础字段
        base_info = {
            "crawl_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "goods_id": item_data.get("num_iid"),
            "goods_title": item_data.get("title"),
            "brand": item_data.get("brand"),
            "current_price": float(item_data.get("price", 0)),
            "original_price": float(item_data.get("orginal_price", 0)),
            "stock_total": int(item_data.get("num", 0)),
            "sales_volume": int(item_data.get("sales", 0)),
            "shop_name": item_data.get("seller_info", {}).get("shop_name", ""),
            "location": item_data.get("location", ""),
            "detail_url": item_data.get("detail_url")
        }
        # 提取SKU规格信息(多规格统一拼接)
        sku_list = item_data.get("skus", {}).get("sku", [])
        sku_text = []
        for sku in sku_list:
            spec_name = sku.get("properties_name", "")
            sku_price = sku.get("price")
            sku_stock = sku.get("quantity")
            sku_text.append(f"{spec_name}|售价{sku_price}|库存{sku_stock}")
        base_info["all_sku_info"] = " || ".join(sku_text)
        return base_info
    except Exception as err:
        print(f"【网络错误】商品{goods_id}拉取异常:{str(err)}")
        return None

模块 2:数据持久化存储函数

每次采集数据写入 Excel 留存历史快照,用于后续价格趋势、销量分析。

def save_monitor_data(data_dict):
    """单条商品监控数据写入Excel历史表"""
    new_df = pd.DataFrame([data_dict])
    try:
        # 判断文件是否存在,存在则追加,不存在新建
        old_df = pd.read_excel(DATA_SAVE_PATH)
        merge_df = pd.concat([old_df, new_df], ignore_index=True)
    except FileNotFoundError:
        merge_df = new_df
    merge_df.to_excel(DATA_SAVE_PATH, index=False)
    print(f"【存储完成】{data_dict['goods_title']} 数据已写入历史表格")

模块 3:价格波动预警检测函数

对比本次采集价格与历史均价,超出阈值自动输出预警,可扩展对接企业微信、短信推送。

def check_price_alert(current_data):
    """检测商品是否大幅降价,触发预警提示"""
    goods_id = current_data["goods_id"]
    current_price = current_data["current_price"]
    try:
        history_df = pd.read_excel(DATA_SAVE_PATH)
        # 筛选当前商品所有历史记录
        goods_history = history_df[history_df["goods_id"] == goods_id]
        if len(goods_history) < 3:
            print(f"【提示】商品{goods_id}历史数据不足3条,暂不做价格波动判断")
            return
        # 计算近7次采集均价作为基准价
        recent_records = goods_history.tail(7)
        avg_base_price = recent_records["current_price"].mean()
        # 计算降价幅度
        drop_rate = (avg_base_price - current_price) / avg_base_price
        if drop_rate >= PRICE_ALERT_THRESHOLD:
            print("="*60)
            print(f"🔥 价格大幅下跌预警!商品ID:{goods_id}")
            print(f"商品名称:{current_data['goods_title']}")
            print(f"历史均价:{avg_base_price:.2f} 元,当前售价:{current_price:.2f} 元")
            print(f"降价幅度:{drop_rate*100:.1f}%,已超过预警阈值{PRICE_ALERT_THRESHOLD*100}%")
            print("="*60)
    except Exception as e:
        print(f"【预警检测异常】{str(e)}")

模块 4:定时监控主循环 + 趋势数据分析可视化

循环轮询所有监控商品,自动采集、存储、预警,附带历史价格折线图生成功能。

def draw_price_trend(goods_id):
    """根据历史数据绘制商品价格趋势图"""
    try:
        df = pd.read_excel(DATA_SAVE_PATH)
        target_data = df[df["goods_id"] == goods_id].copy()
        if len(target_data) < 2:
            print(f"商品{goods_id}历史数据不足,无法生成趋势图")
            return
        # 时间格式转换
        target_data["crawl_time"] = pd.to_datetime(target_data["crawl_time"])
        plt.rcParams["font.sans-serif"] = ["SimHei"]
        plt.figure(figsize=(12, 6))
        plt.plot(target_data["crawl_time"], target_data["current_price"], marker="o", color="#E53E3E", linewidth=2)
        plt.title(f"商品{goods_id} 历史价格波动趋势", fontsize=14)
        plt.xlabel("采集时间")
        plt.ylabel("实时售价(元)")
        plt.grid(alpha=0.3)
        plt.xticks(rotation=30)
        plt.tight_layout()
        plt.savefig(f"goods_{goods_id}_price_trend.png")
        plt.close()
        print(f"【图表生成】商品{goods_id}价格趋势图已保存")
    except Exception as e:
        print(f"【绘图失败】{str(e)}")

def main_monitor_task():
    print("===== Open Claw 商品监控系统启动 =====")
    while True:
        print(f"\n【{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}】开始本轮批量采集")
        for goods_id in MONITOR_GOODS_IDS:
            item_info = fetch_goods_info(goods_id)
            if not item_info:
                continue
            # 存储数据 + 价格预警
            save_monitor_data(item_info)
            check_price_alert(item_info)
        # 每轮采集完成后,生成全部商品趋势图
        for goods_id in MONITOR_GOODS_IDS:
            draw_price_trend(goods_id)
        print(f"本轮采集完成,等待{POLL_INTERVAL}秒后下一轮采集")
        time.sleep(POLL_INTERVAL)

if __name__ == "__main__":
    main_monitor_task()

四、系统运行说明

  1. 参数替换 代码顶部配置区 CLAW_KEYCLAW_SECRET 替换为自己后台生成的凭证;MONITOR_GOODS_IDS 填入需要监控的商品数字 ID;调整 POLL_INTERVAL 修改监控频率。

  2. 文件输出说明

  • jd_goods_monitor_data.xlsx:全量历史采集数据表,包含每次采集的价格、库存、销量、规格、店铺信息;

  • goods_xxx_price_trend.png:每个商品独立价格波动折线图,直观查看长期调价规律。

  1. 预警扩展方案 当前脚本仅控制台输出降价预警,可自行扩展:

  • 对接企业微信机器人、钉钉机器人推送预警消息;

  • 接入短信服务,大额降价、库存清零推送手机通知;

  • 增加库存预警逻辑,库存低于阈值触发提醒。

五、数据深度分析落地场景

场景 1:竞品定价策略分析

通过历史表格筛选同品类竞品,统计近 30 天均价、最低售价、大促降价幅度,判断对手常规调价区间,制定自身定价底线,避免盲目价格战。

场景 2:库存备货参考

持续监控竞品库存变动,当多款竞品同步大幅减库存,预示平台活动开启,可提前备货抢占流量;单一规格长期缺货,可针对性上架同款规格产品。

场景 3:活动节点预判

从价格趋势图识别周期性降价节点(618、双 11、品类日、品牌日),提前规划店铺优惠券、满减活动,同步跟进平台流量窗口期。

场景 4:多规格销量对比

解析 SKU 规格数据,统计各规格长期库存消耗速度,判断消费者偏好尺码、颜色,优化商品备货结构,减少滞销规格库存积压。

六、使用避坑与优化技巧

  1. 缓存合理开启 工具默认开启缓存,短时间重复采集同一商品会读取缓存数据;需要实时最新行情时,可临时关闭缓存参数,适合大促实时盯价场景。

  2. 大批量商品优化 监控商品超过 50 款时,拆分多线程分批采集,单轮间隔适当拉长,避免短时间集中请求消耗额度。

  3. 异常数据过滤 历史表格中出现价格 0、库存异常超大记录,可在数据分析阶段增加过滤逻辑,剔除脏数据,避免趋势图失真。

  4. 长期运行稳定方案 Windows 使用 nssm 将脚本封装为系统服务,Linux 通过 nohup 后台常驻运行,实现 7×24 小时无人值守监控。

七、总结

依托 Open Claw 工具,彻底解决传统页面抓取的反爬、维护难、字段缺失问题,仅用百行 Python 代码搭建完整商品监控 + 数据分析体系。无论是电商运营盯竞品、数据分析师做市场调研、商家做选品备货,这套轻量化方案都能低成本落地,自动沉淀全维度商品历史数据,依靠数据指导定价、备货、活动策略,大幅减少人工重复工作,提升市场响应速度。


少长咸集

群贤毕至

访客