# Rakuten Scraper Service 面向乐天集团两个购物站点的抓取 HTTP API 服务: | 站点 | 域名 | 形态 | | --- | --- | --- | | **乐天市场**(楽天市場) | `rakuten.co.jp` | B2C 商城:店铺 × 商品 × SKU | | **ラクマ**(Rakuma) | `fril.jp` | C2C 二手集市:个人卖家 × 单件商品 | 两站均支持**搜索**、**商品详情**、**商家信息**与**商家名下商品**。 ## 抓取原理 两站的页面形态与防护完全不同,因此各走一条独立链路。 ### 乐天市场:内联 JSON + Akamai 搜索页与(手机版)商品详情页都把整页数据以 JSON 形式内联在 `window.__INITIAL_STATE__` 里, 因此不需要解析 DOM,直接取这段 JSON 即可拿到完整结构化数据。 站点前置 **Akamai Bot Manager**,**不需要真浏览器交互**: | 请求方式 | 实测耗时 | | --- | --- | | 请求头不完整、无 cookie | ~11s(与响应体大小无关,是限速而非封禁) | | 完整浏览器请求头 + 复用 Akamai cookie | ~0.6–0.9s | 所以主链路是纯 httpx,Playwright 仅作为被拦截时的兜底(取 cookie 回灌后重试)。 服务按「指纹画像」维护两条独立通道,各自持有独立 cookie 罐: - **PC 通道** → 搜索页 `search.rakuten.co.jp`、店铺页 `www.rakuten.co.jp` - **手机通道** → 商品详情页 `item.rakuten.co.jp` (详情页只有手机 UA 才返回带 `__INITIAL_STATE__` 的统一模板;PC UA 返回的是各店铺自定义的 EUC-JP 老页面) ### ラクマ:服务端渲染 HTML,无限速 ラクマ 是 Rails 服务端渲染的传统 HTML,**没有** `__INITIAL_STATE__` 这类内联状态, 只能解析 DOM。好在页面上挂了成套的埋点属性,比可见文案稳定得多,也带有 DOM 上 没有的字段(商品数值 ID、卖家 ID、分类/品牌 ID),解析优先取这些: - `data-gtm-click` / `onclick` 里的 dataLayer JSON — 商品卡片的结构化字段 - 页面级 `data-rat-cp-*` 属性 — 成色、运费负担、发货地(已售出商品的规格表会消失,靠它兜底) - `