cross-platform-products-ai-.../docs/TmallCrawlerResearch.md

8.0 KiB
Raw Permalink Blame History

天猫详情页与评论抓取研究

  • 状态Draft
  • 更新时间2026-04-03
  • 关联任务:S3-01

结论

  1. 天猫详情和评论链路已经可以明确到具体入口与 API不再是“靠 DOM 碰运气”的问题。
  2. 默认可交付路径应是“登录态页面状态解析 + 登录态模板回放”的组合,不是匿名直连。
  3. 2026-04-03 的实测里,天猫详情和评论 API 在服务端匿名请求下都会回到带登录跳转的 RGV587_ERROR,因此当前必须把登录态作为前置依赖。
  4. 详情页存在可稳定访问的 PC SSR 壳路由,适合做资源发现、版本跟踪和模板漂移观测;真正稳定可回放的详情数据来源则应优先落在登录态 HTML/SSR 内嵌状态,而不是继续依赖易漂移的详情 mtop。
  5. 最新一轮已把天猫 search 主路径补到服务端:直接回放 https://s.taobao.com/search?q=<query>&tab=mall 的登录态 HTML并优先解析内嵌 g_page_config / JSON 负载,必要时再从商品链接块回退提取候选。

已验证入口

1. 商品详情壳页

  • 直接访问 https://detail.tmall.com/item.htm?id=<itemId>,当前会返回登录跳转页,并带 x-sec-reason: FAIL_SYS_SESSION_EXPIRED
  • 直接访问 https://detail.tmall.com/wow/z/app/tbpc/pc-detail-ssr-2025/home?itemId=<itemId>,可稳定拿到 SSR 壳页与资源清单。
  • 2026-04-03 实测的资源版本为:
    • https://g.alicdn.com/code/npm/@ali/tbpc-pc-detail-ssr-2025/0.0.54/js/data-loader.js
    • https://g.alicdn.com/code/npm/@ali/tbpc-pc-detail-ssr-2025/0.0.54/js/p_home.js

2. 详情 API

data-loader.js 暴露了两条详情接口:

  • mtop.taobao.pcdetail.data.get
  • mtop.taobao.pcdetail.business.data.get

当前主链更像是:

  1. 详情页 SSR 壳加载 data-loader.js
  2. data-loader.js 组装 data 负载:
    • id
    • detail_v: "3.3.2"
    • exParams.queryParams
    • exParams.domain
    • exParams.path_name
    • exParams.pcSource
    • exParams.logicVer
    • exParams.nonce
  3. 浏览器中的 lib-mtop 发起详情请求

3. 评论 API

p_home.js 暴露了两条评论接口:

  • PC 评论:mtop.alibaba.review.list.for.new.pc.detail
  • H5 评论兜底:mtop.taobao.rate.detaillist.get

实测与 bundle 还原出的关键参数如下。

PC 评论请求:

  • itemId
  • bizCode
    • 天猫为 ali.china.tmall
    • 淘宝为 ali.china.taobao
  • channel: "pc_detail"
  • pageSize
  • pageNum
  • 可选 rateType
  • 可选 orderType

H5 评论请求:

  • auctionNumId
  • pageNo
  • pageSize
  • showTrueCount: false
  • rateSrc: "pc_rate_list"
  • 可选 rateType
  • 可选 orderType
  • 可选 expression

4. 2026-04-03 追加实机结论

  • 当前真实商品页 https://detail.tmall.com/item.htm?id=934454505228... 的页面内详情请求稳定命中:
    • mtop.tmall.kangaroo.core.service.route.aldlampservicefixedresv2
  • 该接口在已登录浏览器中的真实返回里,data.resultValue["36500751"].data 只暴露 distinctIddataSetIdresId 等路由信息,本身不是最终商品详情快照。
  • 同一页面的 SSR 内嵌脚本 window.__ICE_APP_CONTEXT__ 已直接包含:
    • 标题
    • 店铺名 / 店铺链接 / 店铺类型
    • 主图
    • 当前展示价格 / 划线价
    • 已售文案
    • 评论总量与首屏评论摘要
  • 结论:
    • 商品详情抓取应优先采用“登录态 HTML + window.__ICE_APP_CONTEXT__ 解析”。
    • 评论抓取继续采用 mtop.taobao.rate.detaillist.get 更合适。
    • 服务端回放评论模板时,必须基于 Cookie 中 _m_h5_tk 重新计算 t/sign;仅替换 data 而不重签名会被 mtop 拒绝。

2026-04-03 实测结果

0. MCP 浏览器实时登录态闭环

  • 使用 MCP Playwright 浏览器直接打开真实商品页 https://detail.tmall.com/item.htm?id=934454505228,页面可在登录态下稳定打开。
  • 通过 page.context().cookies() 抽取当前 *.tmall.comdetail.tmall.com Cookie回灌到 POST /api/platforms/tmall/live-session 后,GET /api/platforms/tmall/live-product-preview?itemId=934454505228&commentCount=20&page=1&maxPages=2 已实机返回 200。
  • 实机返回中已包含:
    • 商品详情:标题、店铺、主图、价格、评论总量。
    • 评论结果:标签、分页信息,以及 20 条真实评论样本。
  • 本轮还暴露并修复了一个真实问题:mtop.taobao.rate.detaillist.get 返回的是 JSONP服务端解析器此前未先解包 mtopjsonp(...),导致“请求成功但评论为空”。该问题已在 apps/api 修复并补齐回归测试。

1. 详情 API

匿名服务端请求 mtop.taobao.pcdetail.data.get 时,返回:

  • ret: ["RGV587_ERROR::SM::..."]
  • data.url 指向 https://login.taobao.com/member/login.jhtml?...

结论:

  • 详情 API 当前必须依赖登录态 Cookie。
  • 仅靠匿名 _m_h5_tk / H5 签名不足以形成稳定交付链路。

2. 评论 API

匿名服务端请求:

  • mtop.alibaba.review.list.for.new.pc.detail
  • mtop.taobao.rate.detaillist.get

同样返回:

  • ret: ["RGV587_ERROR::SM::..."]
  • data.url / data.h5url 指向淘宝登录页

结论:

  • 评论接口虽然前端代码里标记为 needLogin: false,但当前实测依然被服务端登录门槛或风控前置拦住。
  • 对项目来说,评论抓取和详情抓取一样,都要走“先登录、后回放”。

已落库的工程推进

本轮已在 apps/api 补了天猫 live-session 与任务主链骨架:

  • apps/api/src/platforms/tmall/live-session.ts
  • apps/api/src/platforms/tmall/parsers.ts
  • apps/api/src/platforms/tmall/types.ts
  • apps/api/src/platforms/tmall/utils.ts

当前能力包括:

  1. 导入天猫 cookieHeader
  2. 导入评论模板 URL并保留详情模板 URL 作为漂移观测输入
  3. 登录态搜索页改为 s.taobao.com/search?...&tab=mall HTML 拉取,并解析内嵌状态与候选链接
  4. 商品详情改为登录态详情页 HTML 拉取,并解析 window.__ICE_APP_CONTEXT__ 的 SSR 内嵌状态
  5. 评论模板按新 itemId、页码、每页数量改写请求参数
  6. 评论回放前基于 _m_h5_tk 按真实 mtop 公式重算 t/sign
  7. 评论多页回放后做去重聚合
  8. 对登录跳转响应统一抛出 409,可直接接入 NeedLogin / Blocked
  9. 暴露 live-search-preview / live-detail-preview / live-reviews-preview / live-product-preview 预览入口
  10. 把天猫实时 search/detail/reviews 接入任务执行主链,并新增 JD + 天猫双平台 live 主回归、Blocked -> retry success 报告升版回归、Blocked -> retry blocked -> report unchanged 稳定性回归,以及 SearchBlocked 恢复后二次确认只补跑新恢复平台的回归

下一步建议

  1. 用真实登录态继续固化搜索页、评论模板与样本响应,验证 apps/api 的 preview 接口:
    • GET /api/platforms/tmall/live-search-preview
    • POST /api/platforms/tmall/live-session
    • GET /api/platforms/tmall/live-detail-preview
    • GET /api/platforms/tmall/live-reviews-preview
    • GET /api/platforms/tmall/live-product-preview
  2. 抓一轮真实任务闭环:
    • 导入 live session
    • 创建任务并选中带 itemId 的天猫候选
    • 验证报告证据是否落到真实 search/detail/reviews 回放
  3. 固化第一批真实 fixture / HAR补齐 S0-02
  4. 继续扩大双平台主回归包覆盖面;SearchBlocked / NoResult / Blocked 组合、Blocked -> retry success 升版、Blocked -> retry blocked -> report unchanged,以及 SearchBlocked 恢复后二次确认不重复执行已完成平台已覆盖,后续补更多失败/恢复组合与真实 fixture 驱动回归
  5. 如果模板漂移频繁,再补 L2 模板刷新与 L3 登录恢复

参考链接