~/ecommerce/macys-scraper
Macy's Scraper — 商品・価格・SKU・ニュースを取得
Macy'sの商品データ——価格、バリアント、SKU/UPCバーコード、画像、評価・レビュー——に加え、Macy's Inc.のニュースを、検索・カテゴリ・トレンド・商品URLから抽出します。ブラウザ不要でAkamaiにも対応。
百貨店
TypeScriptCrawleeCheerio
アメリカ
カテゴリecommerce / 百貨店
言語TypeScript
スタックTypeScript, Crawlee, Cheerio
マーケットアメリカ
出力クリーンでRAG対応のJSON
主な機能
1つのアクターで4つの取得対象 — 商品検索、カテゴリ、トレンド、Macy's Inc.ニュース
Macy's自身のモバイル・Web JSON APIを利用し、ブラウザなしでAkamai Bot Managerを突破
購入可能な全バリアントについて、SKUごとのUPCバーコードとカラー・サイズ・在庫状況・価格を取得
価格はセント単位の整数に加えローカライズされたフォーマット済み文字列でも提供 — 浮動小数点の丸め誤差なし
詳細なレビューインテリジェンス — 星評価のヒストグラム、推奨件数、フィット感・サイズ感の副次評価
バリアントごとに行を分けず、全カラー・サイズを1つの商品レコードにグループ化
出力にはクリーンな正規URLのみ — 内部APIエンドポイントやクライアントキーは一切含まれません
search、category、trending、商品詳細の結果すべてで統一された正規化スキーマ
活用例
- SKUレベルでの百貨店価格・プロモーションモニタリング
- 競合分析 — Macy's対Nordstrom、Ulta、ブランドDTC価格
- バリアント単位のUPCバーコードによる小売業者横断のカタログマッチング
- Macy'sで販売されているブランドのレビュー・評価インテリジェンス
- 小売ニュースモニタリング — Macy's Inc.のプレスリリースと決算発表
入力パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
scrapeType | string | 必須 | 取得対象:search、category、trending、news、allのいずれか(デフォルト:search)。 |
query | string | 任意 | 商品検索用のキーワード。例:women shoes。 |
startUrls | array | 任意 | MacyのURL(商品/カテゴリページ)またはMacy's Inc.ニュースのURL。 |
categoryIds | array | 任意 | Macyのカテゴリ ID(例:5449)。判明している場合はカテゴリURLの使用を推奨。 |
trendingUrls | array | 任意 | トレンド、ベストセラー、または特集リスティングのURL。 |
newsUrls | array | 任意 | Macy's Inc.のニュース一覧または記事のURL。 |
includeProductDetails | boolean | 任意 | リスト項目にバリアント・SKU・ギャラリーなどの詳細な商品情報を付加(デフォルト:true)。 |
maxPages | number | 任意 | リスト/ニュースソースごとの最大ページネーション深度。 |
maxResults | number | 任意 | 出力レコード数の上限。0=上限なし。 |
proxy | object | 必須 | Apify Proxyまたはカスタムプロキシ URL。レジデンシャル・国はUSを推奨。 |
Output Example
1{
2 "type": "product",
3 "source": {
4 "id": "12345678",
5 "canonicalUrl": "https://www.macys.com/shop/product/calvin-klein-womens-sheath-dress?ID=12345678",
6 "retailer": "macys",
7 "currency": "USD"
8 },
9 "title": "Women's Sleeveless Sheath Dress",
10 "brand": "Calvin Klein",
11 "categories": ["Women", "Dresses", "Work Dresses"],
12 "price": {
13 "sale": 5999,
14 "list": 9800,
15 "currentFormatted": "$59.99",
16 "stockStatus": "InStock"
17 },
18 "stats": { "rating": 4.6, "reviewCount": 9, "ratingPercentage": 92 },
19 "options": [
20 { "type": "Color", "values": [{ "id": "1", "name": "Black" }] },
21 { "type": "Size", "values": [{ "id": "10", "name": "M" }, { "id": "12", "name": "L" }] }
22 ],
23 "variants": [
24 {
25 "id": "987654",
26 "sku": "192837465012",
27 "options": ["Black", "M"],
28 "price": { "stockStatus": "InStock" },
29 "extraInfo": { "upc": "192837465012" }
30 }
31 ],
32 "medias": [{ "type": "Image", "url": "https://slimages.macysassets.com/is/image/MCY/products/.../main.jpg" }]
33}
Pricing
イベント課金制——実際に保存されたアイテムに対してのみ課金されます。
| イベント | 価格 | 内容 |
|---|---|---|
| 商品のスクレイピング | $0.006 | バリアント、SKU/UPC、価格、画像、評価を含む詳細な商品1件 |
| 記事のスクレイピング | $0.002 | タイトル、著者、日付、本文、画像を含むMacy’s Inc.ニュース記事1件 |
上位のApifyプランではボリュームディスカウントが自動適用されます(商品1件あたり最低$0.0045まで)。1,000商品のクロールは定価で約$6.00です。
Tips
- レジデンシャルのUSプロキシを使いましょう。 商品詳細エンドポイントは断続的にレート制限がかかります。レジデンシャルのセッションローテーションならスムーズに通過しますが、データセンターIPは403エラーが増えます。
- 同時実行数は控えめに保ちましょう。
maxConcurrencyは2〜3が最適値です——それ以上に上げてもスループットは向上せず、レート制限に引っかかる頻度が増えるだけです。 - 裸のIDよりカテゴリURLを優先しましょう。 URLにはAPIが期待するカテゴリパスが含まれています。裸のIDでは、より広範囲な結果や空の結果になることがあります。
- バリアントや商品説明が不要な場合は
includeProductDetailsをオフにしましょう。 名前、ブランド、リスト価格、画像、評価だけの高速なリスティングレベル取得になります。
よくある質問
ブラウザなしでどうやってAkamaiを突破しているのですか?
そもそもJSチャレンジと戦っていません。リスティングはMacy'sのモバイルアプリAPIから、商品詳細はWebサイトのJSON APIから取得しており、どちらも匿名の読み取りリクエストに応答する別インフラ上で動作しています。ログイン、Cookie、APIキーは一切不要です。
価格はドル単位ですか、それともセント単位ですか?
浮動小数点の丸め誤差を避けるためセント単位の整数です(5999=$59.99)。あわせてローカライズされたフォーマット済み文字列($59.99)も提供します。
バリアントとUPCはどのように扱われますか?
すべてのカラー・サイズは、variants[]配列を持つ単一の商品レコードにグループ化されます。各バリアントは、Macy'sのSKU関連データから復元された独自のUPCバーコード・カラー・サイズ・在庫状況・価格を保持しています——スウォッチウィジェットからスクレイピングしたものではありません。
商品とニュースを1回の実行でまとめてスクレイピングできますか?
はい。scrapeTypeをallに設定し、query、startUrls、categoryIds、trendingUrls、newsUrlsを任意に組み合わせて指定してください。