做电商运营或者盯竞品的朋友应该都有体会:想搞清楚某个商品今天什么价、库存还剩多少、月销涨了没,最笨的办法就是收藏夹里存几十个链接,隔三差五挨个点开看。以前我也这么干,直到有天发现自己一天要重复打开同一个商品页七八次,实在绷不住了,决定搞个脚本把这些活全自动掉。
这篇文章记录一下我是怎么用 OpenClaw 这个数据工具把京东商品信息拿回来,再做成一个能每天自动跑、自动记录变化的监控小系统的。全程不引什么复杂框架,一个 Python 脚本为主,能跑就行。
先解决数据从哪来的问题
自己写爬虫去抓京东商品页,不是不行,但谁弄谁知道:各种加密参数、验证、反爬策略,光调试就得耗掉一两天,而且页面结构一改就得跟着改,维护成本很高。我的诉求很简单——拿商品ID换回结构化的商品信息(标题、价格、库存、销量、SKU、店铺、图片这些),越省事越好。
后来换用 OpenClaw 这种现成的数据通道,思路就完全不一样了:拿 换一个请求地址,把商品ID传过去,返回的就是整理好的 JSON,字段清清楚楚。省下的时间全花在正事上——做监控和分析。
先看看一次请求能拿到什么
OpenClaw 里京东商品详情这块,入口参数就一个核心的:商品ID(就是链接里那段数字,比如 100126351037)。请求地址大概是这个套路(地址和密钥开通之后会拿到,下面先用占位符表示):
带上参数发个 GET 请求,返回的 JSON 里关键的字段大概是这些:
title 商品标题,一眼看出是什么东西
price / orginal_price 当前价和原价(注意文档里也写了,价格字段存在对不上的情况,后面会讲怎么处理)
num 库存数量
sales 销量,很多商品有这个字段,可以拿来做趋势
skus 规格列表,每个规格的 id、价格、库存都在里面,多规格商品要重点看这个
item_imgs 商品图片
seller_info 店铺信息
location 发货地,选品的时候有用
这些字段基本覆盖了日常监控 90% 的需求。下面直接上代码。
写一个最朴素的取数脚本
依赖就一个 requests,装好就能跑:
第一次跑通的时候还挺有成就感的,一个商品ID换回一坨结构化数据,直接能用。接下来就顺手把它存下来。
把快照存下来
监控的前提是有历史。我的做法很简单:每次取数就把当天的"快照"追加到 SQLite 里,一张表搞定,不用上什么重型数据库。
定时自动跑
我自己是每天 9 点、14 点、21 点各跑一次,用系统自带的定时任务就够了,没必要为了这个专门引一个调度框架:
monitor.py 的主逻辑就是遍历我收藏的那批商品ID,逐个取数、落库:
让数据自己说话
跑了几天之后,数据开始有点意思了。比如我能直接回答这种问题:这个商品最近 7 天最低价是多少?什么时候降的?SKU 里的某个规格是不是一直缺货?
想更直观一点,用 matplotlib 画个价格曲线,几行代码的事,这里就不展开贴图了。降价提醒也可以做:如果最新价格比历史最低价还低,就往群里发个通知,抢券补货都来得及。
踩过的坑,帮你提前避雷
1.价格字段别全信。文档里原话是"当前商品id价格【价格会对不上】",尤其多规格商品,price 这个字段可能是某个规格的价,真正准的是 skus 里逐条对。拿不准的时候就遍历 skus,按你自己的规则取价。
2.有缓存。默认走的是缓存数据,速度快但可能不是最新,想要更实时的数据记得把 cache 参数关掉(cache=no),代价是慢一点、调用量上去了,看你的场景取舍。
3.别高频猛打。我一开始图省事写了个 5 分钟一轮的循环,结果跑一会儿就报错被限了。监控类需求几分钟和几小时的差别其实没那么大,改成每天固定几次,稳稳的。
4.商品下架/改ID。有些商品链接会失效,脚本里记得 try/except,单条失败别让整个任务崩掉,日志打出来就行。
最后说两句
其实整个过程拆开看没什么高深的:一个现成的数据通道解决取数,SQLite 解决存储,cron 解决定时,剩下的就是根据你自己的业务去定义"什么变化值得关注"。这套东西我跑了快一个月,省下来的时间早就够写这篇文章了。