×

api 数据挖掘

用 OpenClaw 把京东商品数据做成自动监控报表,全程不到一小时

admin admin 发表于2026-09-28 09:57:23 浏览6 评论0

抢沙发发表评论

做电商运营或者盯竞品的朋友应该都有体会:想搞清楚某个商品今天什么价、库存还剩多少、月销涨了没,最笨的办法就是收藏夹里存几十个链接,隔三差五挨个点开看。以前我也这么干,直到有天发现自己一天要重复打开同一个商品页七八次,实在绷不住了,决定搞个脚本把这些活全自动掉。

这篇文章记录一下我是怎么用 OpenClaw 这个数据工具把京东商品信息拿回来,再做成一个能每天自动跑、自动记录变化的监控小系统的。全程不引什么复杂框架,一个 Python 脚本为主,能跑就行。

先解决数据从哪来的问题

自己写爬虫去抓京东商品页,不是不行,但谁弄谁知道:各种加密参数、验证、反爬策略,光调试就得耗掉一两天,而且页面结构一改就得跟着改,维护成本很高。我的诉求很简单——拿商品ID换回结构化的商品信息(标题、价格、库存、销量、SKU、店铺、图片这些),越省事越好。

后来换用 OpenClaw 这种现成的数据通道,思路就完全不一样了:拿 key 和 secret 换一个请求地址,把商品ID传过去,返回的就是整理好的 JSON,字段清清楚楚。省下的时间全花在正事上——做监控和分析。

先看看一次请求能拿到什么

OpenClaw 里京东商品详情这块,入口参数就一个核心的:商品ID(就是链接里那段数字,比如 100126351037)。请求地址大概是这个套路(地址和密钥开通之后会拿到,下面先用占位符表示):

BASE_URL = "https://你的服务地址/jd/item_get_pro"
KEY = "你的key"
SECRET = "你的secret"

带上参数发个 GET 请求,返回的 JSON 里关键的字段大概是这些:

  • title 商品标题,一眼看出是什么东西

  • price / orginal_price 当前价和原价(注意文档里也写了,价格字段存在对不上的情况,后面会讲怎么处理)

  • num 库存数量

  • sales 销量,很多商品有这个字段,可以拿来做趋势

  • skus 规格列表,每个规格的 id、价格、库存都在里面,多规格商品要重点看这个

  • item_imgs 商品图片

  • seller_info 店铺信息

  • location 发货地,选品的时候有用

这些字段基本覆盖了日常监控 90% 的需求。下面直接上代码。

写一个最朴素的取数脚本

依赖就一个 requests,装好就能跑:

import requests

BASE_URL = "https://你的服务地址/jd/item_get_pro"
KEY = "你的key"
SECRET = "你的secret"

def fetch_item(num_iid):
    params = {
        "key": KEY,
        "secret": SECRET,
        "num_iid": num_iid,
    }
    resp = requests.get(BASE_URL, params=params, timeout=10)
    resp.raise_for_status()
    data = resp.json()
    return data.get("item") or {}

第一次跑通的时候还挺有成就感的,一个商品ID换回一坨结构化数据,直接能用。接下来就顺手把它存下来。

把快照存下来

监控的前提是有历史。我的做法很简单:每次取数就把当天的"快照"追加到 SQLite 里,一张表搞定,不用上什么重型数据库。

import sqlite3
from datetime import datetime

def init_db():
    conn = sqlite3.connect("jd_monitor.db")
    conn.execute("""
        CREATE TABLE IF NOT EXISTS snapshots (
            num_iid  TEXT,
            ts       TEXT,
            title    TEXT,
            price    REAL,
            orginal_price REAL,
            stock    INTEGER,
            sales    INTEGER
        )
    """)
    conn.commit()
    return conn

def save_snapshot(conn, num_iid, item):
    conn.execute(
        "INSERT INTO snapshots (num_iid, ts, title, price, orginal_price, stock, sales) VALUES (?,?,?,?,?,?,?)",
        (
            num_iid,
            datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            item.get("title"),
            item.get("price"),
            item.get("orginal_price"),
            item.get("num"),
            item.get("sales"),
        ),
    )
    conn.commit()

定时自动跑

我自己是每天 9 点、14 点、21 点各跑一次,用系统自带的定时任务就够了,没必要为了这个专门引一个调度框架:

# crontab 里加三行即可
# 0 9 * * * cd /path/to/script && python3 monitor.py
# 0 14 * * * cd /path/to/script && python3 monitor.py
# 0 21 * * * cd /path/to/script && python3 monitor.py

monitor.py 的主逻辑就是遍历我收藏的那批商品ID,逐个取数、落库:

WATCH_LIST = ["10335871600", "100126351037"]  # 换成你要盯的商品ID

def main():
    conn = init_db()
    for num_iid in WATCH_LIST:
        try:
            item = fetch_item(num_iid)
            save_snapshot(conn, num_iid, item)
            print(f"[OK] {num_iid} {item.get('title', '')[:20]} {item.get('price')}")
        except Exception as e:
            print(f"[FAIL] {num_iid}: {e}")
    conn.close()

if __name__ == "__main__":
    main()

让数据自己说话

跑了几天之后,数据开始有点意思了。比如我能直接回答这种问题:这个商品最近 7 天最低价是多少?什么时候降的?SKU 里的某个规格是不是一直缺货?

def price_trend(conn, num_iid):
    rows = conn.execute(
        """SELECT ts, price, stock, sales FROM snapshots
           WHERE num_iid=? ORDER BY ts""",
        (num_iid,),
    ).fetchall()
    for ts, price, stock, sales in rows:
        print(ts, "价格:", price, "库存:", stock, "销量:", sales)

想更直观一点,用 matplotlib 画个价格曲线,几行代码的事,这里就不展开贴图了。降价提醒也可以做:如果最新价格比历史最低价还低,就往群里发个通知,抢券补货都来得及。

踩过的坑,帮你提前避雷

1.价格字段别全信。文档里原话是"当前商品id价格【价格会对不上】",尤其多规格商品,price 这个字段可能是某个规格的价,真正准的是 skus 里逐条对。拿不准的时候就遍历 skus,按你自己的规则取价。

2.有缓存。默认走的是缓存数据,速度快但可能不是最新,想要更实时的数据记得把 cache 参数关掉(cache=no),代价是慢一点、调用量上去了,看你的场景取舍。

3.别高频猛打。我一开始图省事写了个 5 分钟一轮的循环,结果跑一会儿就报错被限了。监控类需求几分钟和几小时的差别其实没那么大,改成每天固定几次,稳稳的。

4.商品下架/改ID。有些商品链接会失效,脚本里记得 try/except,单条失败别让整个任务崩掉,日志打出来就行。

最后说两句

其实整个过程拆开看没什么高深的:一个现成的数据通道解决取数,SQLite 解决存储,cron 解决定时,剩下的就是根据你自己的业务去定义"什么变化值得关注"。这套东西我跑了快一个月,省下来的时间早就够写这篇文章了。


少长咸集

群贤毕至

访客