~/ecommerce/sephora-scraper
Sephora Scraper(グローバル)
米国、カナダ、9つのEU市場、10のアジア太平洋市場——合計21店舗のSephoraから、バリアント・価格・画像・成分・レビューを含む完全な商品データを、単一の正規化スキーマで抽出するApifyアクターです。
美容
>99%成功
PythonCrawleecurl_cffi
アメリカカナダフランスイタリアドイツスペインポーランドチェコギリシャルーマニアポルトガルニュージーランドオーストラリアシンガポールマレーシアタイインドネシアフィリピン香港台湾ブルネイ
カテゴリecommerce / 美容
言語Python
スタックPython, Crawlee, curl_cffi
マーケットアメリカ, カナダ, フランス, イタリア, ドイツ, スペイン, ポーランド, チェコ, ギリシャ, ルーマニア, ポルトガル, ニュージーランド, オーストラリア, シンガポール, マレーシア, タイ, インドネシア, フィリピン, 香港, 台湾, ブルネイ
成功率>99%
出力クリーンでRAG対応のJSON
主な機能
1つのアクターで21店舗に対応 — 米国、カナダ、9つのEU市場、10のAPAC市場を単一のSKUでカバー
市場の自動検出 — sephora.*のURLを貼り付けるだけで、ディスパッチャーが適切なモジュールへルーティング
複数市場を混在させた実行 — US+EU+SEAのURLを1つのstartUrlsリストにまとめ、`market`タグ付きの単一データセットへストリーミング
ロケールに応じた正確な価格 — NZD、EUR、USD、AUDおよびその他17通貨を、Sephora自身のローカライゼーション層から返却
正規化されたスキーマ — すべての市場が同じ`source / brand / title / options / variants / medias / stats`構造で出力
市場ごとのセッション分離 — 認証状態がリージョン間で混線することはありません
グローバルサーキットブレーカー — 50回連続で失敗すると実行を中断し、ダウンしたターゲットへの無駄な計算リソース消費を回避
活用例
- 米国・EU・APACの美容市場を横断する地域間価格インテリジェンス
- 市場横断での商品在庫・品揃えモニタリング
- 新たなSephora地域に進出するブランド向けの競合分析
- 地域別処方における成分比較
- レビュー・評価のトラッキング — SEAのウィッシュリストシグナルや米国のAIセンチメント要約を含む
- 市場ごとのロイヤルティ/会員価格監査
入力パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
startUrls | array | 必須 | 任意のsephora.*店舗の商品またはカテゴリURL。市場はホスト名から自動検出されます。 |
market | string | 任意 | 市場を上書き指定するオプション項目(us、eu-fr、eu-it、eu-de、eu-es、eu-pl、eu-cz、eu-gr、eu-ro、eu-pt、sea-nz、sea-au、sea-sg、sea-my、sea-th、sea-id、sea-ph、sea-hk、sea-tw、sea-bn)。 |
locale | string | 任意 | オプションのBCP 47ロケール(例:fr-FR、en-NZ) — 市場のデフォルト設定を上書きします。 |
categoryIds | array | 任意 | EU限定。C479のようなSFCCカテゴリID — カテゴリURLを貼り付ける代わりに使用できます。 |
proxy | object | 任意 | Apifyプロキシ設定。レジデンシャルを強く推奨。apifyProxyCountryを対象市場に固定してください。 |
maxConcurrency | number | 任意 | 同時実行リクエスト数。デフォルト5。US:2〜5。EU:3。SEA:8〜16。 |
maxRequestsPerCrawl | number | 任意 | 全市場共通のグローバルな上限値。0=無制限。 |
Supported markets
| 地域 | マーケットID | 国 | 通貨 | ホスト名 |
|---|---|---|---|---|
| 南北アメリカ | us | United States | USD | sephora.com |
| 南北アメリカ | us | Canada | CAD | sephora.ca |
| EU | eu-fr | France | EUR | sephora.fr |
| EU | eu-it | Italy | EUR | sephora.it |
| EU | eu-de | Germany | EUR | sephora.de |
| EU | eu-es | Spain | EUR | sephora.es |
| EU | eu-pl | Poland | PLN | sephora.pl |
| EU | eu-cz | Czech Republic | CZK | sephora.cz |
| EU | eu-gr | Greece | EUR | sephora.gr |
| EU | eu-ro | Romania | RON | sephora.ro |
| EU | eu-pt | Portugal | EUR | sephora.pt |
| APAC | sea-nz | New Zealand | NZD | sephora.nz |
| APAC | sea-au | Australia | AUD | sephora.com.au |
| APAC | sea-sg | Singapore | SGD | sephora.sg |
| APAC | sea-my | Malaysia | MYR | sephora.com.my |
| APAC | sea-th | Thailand | THB | sephora.co.th |
| APAC | sea-id | Indonesia | IDR | sephora.co.id |
| APAC | sea-ph | Philippines | PHP | sephora.ph |
| APAC | sea-hk | Hong Kong | HKD | sephora.hk |
| APAC | sea-tw | Taiwan | TWD | sephora.tw |
| APAC | sea-bn | Brunei | BND | sephora.bn |
Output Example
1{
2 "market": "sea-nz",
3 "source": {
4 "id": 58792,
5 "canonicalUrl": "https://www.sephora.nz/products/rare-beauty-true-to-myself-natural-matte-longwear-foundation",
6 "retailer": "SEPHORA",
7 "currency": "NZD"
8 },
9 "brand": "Rare Beauty",
10 "title": "True To Myself Natural Matte Longwear Foundation",
11 "description": "<p>A self-priming and self-setting foundation...</p>",
12 "ingredients": "Aqua/Water, Cyclopentasiloxane, Glycerin...",
13 "currentSku": "770225",
14 "categories": ["makeup/face/foundation"],
15 "options": [
16 { "name": "shade", "id": "66488", "values": [{"value": "1 Fair Neutral", "orderable": true}] }
17 ],
18 "variants": [
19 {
20 "id": "276343",
21 "sku": "770225",
22 "price": { "current": 77.0, "original": 77.0, "stockStatus": "IN_STOCK" },
23 "options": [{"name": "shade", "value": "1 Fair Neutral"}],
24 "highlights": ["NEW", "Only at Sephora"],
25 "wishlisted": null
26 }
27 ],
28 "medias": [{ "url": "https://www.sephora.nz/.../foundation-shade.jpg", "type": "image" }],
29 "stats": { "reviewCount": 971, "rating": 4.8, "lovesCount": null }
30}
Tips
- プロキシの国を対象市場に固定しましょう。 国が一致しないレジデンシャル出口は、SephoraのAkamai層による403エラーの最大の原因です。
apifyProxyCountryを店舗のISOコード(US、FR、NZなど)に設定してください。 - まずはスモークテストを。 新しい市場での本番実行前に
maxRequestsPerCrawl=10を設定して試しましょう。 - 同時実行数はリージョンごとに調整しましょう。 US:2〜5。EU:3。SEA:8〜16。混在実行では、各市場が独自のセマフォを持ちます。
よくある質問
このスクレイパーが対応しているSephora店舗はどこですか?
21店舗:米国(sephora.com)、カナダ(sephora.ca)、9つのEU市場(フランス、イタリア、ドイツ、スペイン、ポーランド、チェコ、ギリシャ、ルーマニア、ポルトガル)、10のAPAC市場(ニュージーランド、オーストラリア、シンガポール、マレーシア、タイ、インドネシア、フィリピン、香港、台湾、ブルネイ)です。市場はホスト名から自動検出されるため、複数市場を混在させる場合も入力の変更は不要です。
1回の実行で複数の市場をスクレイピングできますか?
はい。sephora.com、sephora.fr、sephora.nzのURLを1つのstartUrlsリストに混在させてください。ディスパッチャーが市場ごとにグループ化し、各モジュールを市場に適した認証で並列実行し、すべてのデータセットアイテムに`market`フィールドを付与します。
アンチボット対策にはどう対応していますか?
全市場でレジデンシャルプロキシを使用し、EUとSEAのトラフィックにはcurl_cffiによるブラウザ品質のTLSフィンガープリンティングを用いてAkamaiを回避します。米国のトラフィックは、403/429でローテーションするセッションプールを備えたCrawleeのHttpCrawlerを使用します。
既存のv1.x US実行設定はそのまま使えますか?
はい。2.0より前の入力——startUrls、maxConcurrency、proxy、maxRequestsPerCrawl——は同一の挙動をします。出力の変更点は、すべてのアイテムに新たな`market`キーが追加される点のみで、これは後方互換性のある追加的な変更です。
SEAデータで一部のフィールドがnullになるのはなぜですか?
Sephora SEAのAPIは`lovesCount`カウンターを公開していないため、APACのアイテムでは`stats.lovesCount = null`になります。代わりに、各バリアントにはboolean型の`wishlisted`フィールドがあります。逆に、`sentiments`(AIによるレビュー要約)と`source.crawlUrl`は米国限定です。
市場ごとに個別のAPIトークンやアカウントが必要ですか?
いいえ。既存のApify APIトークンをそのまま使用できます。市場ごとのゲストトークンはアクター内部で処理されます——EU/SEAでは認証情報は不要で、米国は標準のApifyレジデンシャルプロキシで動作します。