问答

怎么采集小红书商城的商品价格和买家评价?

简短回答

按关键词搜小红书商城,每页 20 个商品,带现价和原价(元),每页 $0.02;再取每个商品第一页买家评价,每次 $0.02。30 个竞品的价格,加上两种排序的评价,共 $1.24。

一个卖便携咖啡机的品牌,在考虑要不要上小红书商城。拍板之前,它想先弄清已经在卖的 30 个链接的两件事:价格分布在哪个区间,买家评价里都说了什么。在 App 里刷一下午,只能得到一个印象;整理成表,才有能拿到会上讨论的数字。

两个接口

  • 小红书商城商品搜索:按买家会输入的关键词搜,每页 20 个商品,带标题、现价和原价(元)、图片和店铺。商城不以数字显示销量,所以 sold 为 null。
  • 小红书商城商品评价:传搜索结果里 24 位的商品 ID,返回买家的星级、评价内容、购买的款式、晒图和点赞数。App 只给第一页,大约 12 条,没有后续页可翻。

有个办法能多拿一些:同一个商品分别用 sort=relevance 和 sort=latest 各取一次。两份第一页只有部分重叠,最新的评价还能看出最近一批货有没有出问题。

费用

任务 调用次数 费用
搜 2 页,留下最接近的 30 个商品 2 $0.04
30 个商品按相关度取评价 30 $0.60
同样 30 个商品取最新评价 30 $0.60
合计 62 {{cost:xiaohongshu.shop.products.search2+xiaohongshu.shop.products.reviews.list60}}

代码

import os, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def get(path, **params):
    body = requests.get(API + path, headers=H, params=params, timeout=60).json()
    if body["code"] != "ok":
        raise RuntimeError(f"{body['code']}: {body['message']}")
    return body["data"]

products = get("/v1/xiaohongshu/shop/products/search", query="便携咖啡机")["items"]
for p in products[:30]:
    seen = {}
    for order in ("relevance", "latest"):
        for r in get("/v1/xiaohongshu/shop/products/reviews/list", id=p["id"], sort=order)["items"]:
            seen[r["id"]] = r
    low = [r["text"] for r in seen.values() if (r["rating"] or 5) <= 3]
    print(p["title"][:30], p["price"], p["original_price"], len(seen), "条评价,三星及以下", len(low), "条")

商城不给的东西

  • 单个商品的评价深度。 每个商品两页,足够看出 30 个商品里反复出现的问题,但读不全某一个商品的全部评价。
  • 销量。 没有销量数字。想看需求热度,可以用小红书笔记搜索,数一数有多少笔记提到这个商品、互动怎么样。
  • 到手价。 返回的是商品页上标的价格,结算时的优惠券和店铺折扣可能让实际价格更低。
  • 评价人身份。 昵称是商城打了码的,只有这些。

其他做法

自己店铺的数据,在商家后台千帆里要全得多:订单、流量、每一条评价都有。小红书上关于商品的讨论大多发生在笔记里,可以配合笔记评论看没被筛选过的说法。如果你主要在天猫、京东卖,那里单个商品的评价量大得多,不过这套接口不覆盖。只看五个商品的话,手动翻一翻也够了。完整流程见选品定价,品牌口碑见口碑研究。

更新于