~/ecommerce/woocommerce-scraper
WooCommerce スクレイパー — 商品・価格・在庫・レビュー
任意のWooCommerceストアから商品、バリエーション、カテゴリ、カスタマーレビューを取得します。ドメインを渡すだけでカタログを見つけ、ストアがJSON APIを無効にしていても取得できます。
総合
TypeScriptCheerio
グローバル
カテゴリecommerce / 総合
言語TypeScript
スタックTypeScript, Cheerio
マーケットグローバル
出力クリーンでRAG対応のJSON
主な機能
ドメインだけで十分——Actorが自力でカタログを見つけます
JSON APIが無効化・ファイアウォールで遮断されたストアでも動作
バリエーション商品はすべての組み合わせを取得し、それぞれに SKU・価格・在庫状態が付きます
カスタマーレビューは評価・投稿者・日付を含む独立レコードとして保存
価格は最小通貨単位で保持し、ストア自身の表示文字列も併記するため、計算で丸め誤差が出ません
ストアごとの上限を設定でき、複数ストア実行で大きなカタログが他を食い潰しません
全カタログ巡回だけでなく、実行対象の各ストアに対するキーワード検索にも対応
既定の並列数は控えめ — WooCommerce ストアの多くは自己ホストの小規模 WordPress サイトです
活用例
- 独立系 WooCommerce 店舗の価格・品揃えモニタリング
- どのマーケットプレイスにも載らない小規模店舗のロングテールから商品データベースを構築
- 競合が Shopify ではなく WordPress を使っている場合の競合調査
- レビュー分析による商品評価と評点分布の把握
- 比較サイト・マーケットプレイス・購買エージェントへの商品データ供給
- 流通・再販チェックのための在庫と入手可能性の追跡
入力パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
domains | array | 任意 | ドメインを1行に1つ — もっとも簡単な指定方法です |
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}
ヒント
まず1ドメイン・小さめの上限で。 100件もあれば、そのストアがどの経路を公開しているか、レコードがどれだけ揃うかが分かります。 複数ストア実行では maxProductsPerStore を設定。 設定しないと、最初の大規模カタログが他店舗に届く前に予算を使い切ります。 レビューは必要なときだけ有効化。 別レコード・別課金であり、価格監視用途では通常不要です。 HTML フォールバックは有効のままに。 閉じたストアを取得できるのはこの経路のためで、実行ごとの上限でコストは抑えられます。
よくある質問
ストアが JSON API を無効にしている場合は?
それこそがこのActorの想定する一般的なケースです。状況を検出したうえでカタログを取得するので、閉じられたストアでも商品が返ります。
そのサイトが本当に WooCommerce かどうかは?
ドメインをActorに渡して判断を任せてください——判定は実行の一部です。
バリエーションは別レコードですか?
いいえ。1レコードが1商品で、バリエーションは variants に入れ子となり、それぞれ SKU・価格・在庫状態を持ちます。レビューを有効にした場合のみ、別レコードになります。