~/ecommerce/woocommerce-scraper
WooCommerce 爬虫——商品、价格、库存与评价
从任意 WooCommerce 店铺抓取商品、变体、类目与用户评价。只需给出域名即可定位商品目录——即使店铺关闭了 JSON API 也能抓取。
综合
TypeScriptCheerio
全球
分类ecommerce / 综合
语言TypeScript
技术栈TypeScript, Cheerio
市场全球
输出干净、RAG 就绪的 JSON
核心特性
给个裸域名就够——Actor 会自行找到商品目录
店铺的 JSON API 被关闭或被防火墙拦截时依然可用
可变商品的每个变体都会返回,各自带 SKU、价格与库存状态
用户评价作为独立记录输出,含评分、作者与日期
价格用最小货币单位表示,同时附店铺自身的格式化字符串,计算不会出现舍入误差
支持按店铺设置上限,多店铺任务中单个大目录不会吃掉全部额度
支持对本次运行中的每个店铺做关键词搜索,而不只是全目录抓取
默认并发保守——多数 WooCommerce 店铺是自建的小型 WordPress 站点
应用场景
- 对独立 WooCommerce 零售商做价格与铺货监控
- 从大量小众店铺构建商品库,这些店铺通常不在任何平台目录中
- 竞品调研——当对手用的是 WordPress 而不是 Shopify
- 评价挖掘:商品口碑与评分分布
- 为比价站、市场平台与购物 Agent 提供商品数据
- 分销与经销核查中的库存与可得性追踪
输入参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
domains | array | 可选 | 裸域名,每行一个——最简单的指向方式 |
startUrls | array | 可选 | 任意 WooCommerce 店铺 URL:店铺根目录、类目页、标签页或单个商品页 |
maxProducts | integer | 可选 | 整次运行保存的商品记录总数 |
maxProductsPerStore | integer | 可选 | 单店上限,避免一个大目录占满全部额度 |
includeVariations | boolean | 可选 | 抓取可变商品的全部变体,各自带 SKU、价格与库存 |
includeReviews | boolean | 可选 | 将用户评价保存为独立记录,含评分、作者与日期 |
query | string | 可选 | 对本次运行中每个店铺根或域名执行的搜索词 |
allowHtmlFallback | boolean | 可选 | 当店铺 JSON API 被关闭或拦截时,允许使用 HTML 回退 |
proxy | object | 可选 | 代理配置;仅在店铺确有需要时才升级代理 |
输出示例
1{
2 "source": {
3 "id": "1251",
4 "canonicalUrl": "https://www.shoprootscience.com/shop/sample-kit",
5 "retailer": "shoprootscience.com",
6 "language": "en",
7 "currency": "USD"
8 },
9 "title": "Sample Kit",
10 "brand": "",
11 "categories": ["Samples"],
12 "price": {
13 "current": 2000,
14 "currentFormatted": "$20.00",
15 "previous": 2000,
16 "stockStatus": "InStock",
17 "stockCount": 0
18 },
19 "stats": { "rating": 4.75, "reviewCount": 4 },
20 "options": [
21 { "type": "Sample 1", "values": [
22 { "id": "Bare Facial Serum", "name": "Bare Facial Serum" },
23 { "id": "Youth Facial Serum", "name": "Youth Facial Serum" }
24 ] }
25 ],
26 "variants": [
27 { "sku": "SK-BARE", "price": { "current": 2000, "currentFormatted": "$20.00", "stockStatus": "InStock" } }
28 ]
29}
使用建议
先用单个域名加小额度试跑。 一百条商品就足以看出该店铺开放了哪层数据来源、记录有多完整。 多店铺任务务必设置 maxProductsPerStore。 否则第一个大目录可能在其他店铺还没开始前就用光额度。 评价要按需开启。 它是独立记录、单独计费,多数价格监控场景并不需要。 保持 HTML 回退开启。 正是它让封闭的店铺仍可抓取;单次运行的上限会把成本控制住。
常见问题
如果店铺关掉了 JSON API 怎么办?
这正是本 Actor 针对的常见情况。它会自动识别并照样抓取商品目录,所以关闭了接口的店铺也能返回商品。
怎么确认一个站点确实是 WooCommerce?
把域名交给 Actor,由它在运行中判定。
变体是独立记录吗?
不是。一条记录即一个商品,变体嵌套在 variants 中,各自带 SKU、价格与库存状态。开启后的评价才是独立记录。