Tony Wang6 分で読めます2026年に Zappos をスクレイピングする方法(API & Python)
2026年に Zappos をスクレイピングする — 商品検索、価格、評価、注目レビュー、カラーバリエーションを構造化 JSON で取得。DIY、ノーコード、または構造化 API で。
2026年に Zappos をスクレイピングする最も手早い方法は、Zappos.com のページを自分でパースする代わりに、商品検索と商品詳細の正規化された JSON を返す構造化 API を呼び出すことです。Zappos.com LLC / Amazon の子会社である Zappos には外部開発者向けのセルフサービス型公開 API がなく、その利用規約はデータマイニング、ボット、データ抽出ツールを明示的にライセンスの対象外として名指ししています。このガイドでは3つのアプローチすべてを取り上げ、それぞれが何を返し、DIY がどこで破綻するか、そして法律上の実情を最初に解説します。
なぜ Zappos をスクレイピングするのか?
Zappos の商品・レビューデータは次のような用途を支えます。
- 価格と特売の追跡 — シューズやアパレル商品の価格がどう動き、いつセールになるかを監視できます。
- アソートメントリサーチ — カテゴリや検索語ごとに Zappos が扱うブランドとスタイルを把握できます。
- レビューと評判の分析 — 商品ラインごとの評価内訳と注目レビューの本文を取得できます。
- カラーバリエーションのマッピング — 特定のシューズが展開しているすべての姉妹カラーを列挙し、特定の1色について詳細を取得できます。
- 小売ベンチマーキング — 他のシューズ・アパレル小売業者と価格やアソートメントを比較できます。
Zappos をスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
Zappos の商品ページは安定した公開 JSON エンドポイントではなくサーバーサイドのデータからレンダリングされるため、DIY のスクレイパーはレンダリングされたページを取得してパースする必要があります。
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.zappos.com/p/nike-air-zoom-pegasus-40/product/9876543/color/3",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, rating breakdown, featured reviews, and sibling color
# variants are embedded in page data, not consistently exposed
# as selectable markup
デモは動きますが、その後破綻します。
- 利用条件が明示的。 Zappos の規約はサイトを利用するライセンスから「データマイニング、ロボット(ボット)、または類似のデータ収集・抽出ツール」を除外し、さらに別途、商品一覧、説明文、画像、価格の収集や使用を禁止しています。これは曖昧なケースではありません。
- 公式で文書化された API がない。 Zappos にはセルフサービス型の開発者プログラムがなく、外部開発者向けの承認された代替手段が存在しないからこそ、一部のサードパーティ製スクレイピングツールが存在しています。
- カラーバリエーションが商品ごとにファンアウトする。 1つの商品ページは1色しか表示しません。姉妹カラーはそれぞれ別のレンダリングになるため、あるスタイルの完全なカバレッジを取得するには各バリエーションを個別に発見・取得する必要があります。
- 注目レビューはキュレーションされたものであり、レビューの全件フィードではない。 ページはページ分割されたリストではなく、サイト側が選んだ少数のレビューを表示するだけなので、ページをパースしても Zappos が表示すると決めたものしか得られません。
- 安定した公開スキーマがない。 ページスクレイピング用のパーサーは、Zappos がマークアップやレンダリングを変更するたびに、変更履歴やバージョニングの通知なしに静かに壊れます。
選択肢2: ノーコードツール
一回限りの Zappos 取得向けにマーケットプレイスのスクレイパーアクターは存在しますが、DIY と同じ利用規約上のリスクとレンダリングの脆さを引き継ぎ、それでもスタイルの完全なカバレッジを組み立てるにはカラーバリエーションごとにファンアウトする必要があります。
選択肢3: 構造化された Zappos API
繰り返し実行できる構造化されたワークフローには、Crawlora の Zappos API が検索と商品詳細の正規化された JSON を返し、ページのパースは不要で、認証情報も不要です。カタログを検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/zappos/search?query=running+shoes" \
-H "x-api-key: $CRAWLORA_API_KEY"
続いて product_id(および任意で color_id)を解決し、完全な詳細を Python で取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/zappos"
hits = requests.get(f"{base}/search", headers=h, params={"query": "running shoes"}).json()["data"]["products"]
product_id = hits[0]["product_id"]
color_id = hits[0]["color_id"]
detail = requests.get(
f"{base}/product/{product_id}",
headers=h,
params={"colorId": color_id},
).json()["data"]
検索レスポンスはページ分割された正規化 JSON です(実際のフィールドはドキュメントで確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"query": "running shoes",
"page": 1,
"page_count": 42,
"products": [
{
"product_id": "9876543",
"color_id": "3",
"brand": "Nike",
"name": "Air Zoom Pegasus 40",
"price": 130.0,
"original_price": 130.0,
"on_sale": false,
"rating": 4.6,
"review_count": 812,
"url": "https://www.zappos.com/p/nike-air-zoom-pegasus-40/product/9876543/color/3"
}
]
}
}
page_count を超えるページをリクエストすると、エラーではなく空の products 配列を伴う通常の 200 が返ります。これが検索をページングする際の自然な終了条件になります。
商品詳細にはパンくずリスト、評価の内訳、最大2件の注目レビュー、すべての姉妹カラーバリエーションがネストされています。
{
"data": {
"product_id": "9876543",
"color_id": "3",
"brand": "Nike",
"name": "Air Zoom Pegasus 40",
"description": "A responsive daily trainer with...",
"price": 130.0,
"original_price": 130.0,
"on_sale": false,
"breadcrumbs": [
{ "name": "Shoes", "url": "https://www.zappos.com/shoes" },
{ "name": "Running", "url": "https://www.zappos.com/running-shoes" }
],
"rating": {
"average": 4.6,
"review_count": 812,
"breakdown": { "5": 540, "4": 190, "3": 60, "2": 15, "1": 7 }
},
"featured_reviews": [
{
"author": "RunnerJen",
"date": "2026-06-02",
"rating": 5,
"text": "Best daily trainer I've owned. True to size, great cushioning.",
"comfort": 5,
"width": "True to Size"
}
],
"color_variants": [
{ "color_id": "3", "color_name": "Black/White", "url": "https://www.zappos.com/p/.../color/3" },
{ "color_id": "7", "color_name": "Photon Dust", "url": "https://www.zappos.com/p/.../color/7" }
]
}
}
まだレビューがない商品は空の featured_reviews リストを返します。常に少なくとも1件のレビューがあると想定せず、このケースを処理してください。product_id + color_id ごとに1行ずつ保存し、スケジュールを組んで再実行すれば price/on_sale の変化を追跡できます。
収集できるもの
エンドポイントごとの公開商品ページデータです。ページ分割された検索結果(product_id、color_id、ブランド、名前、価格、セール状況、評価、レビュー件数)と、完全な商品詳細(ブランド、説明文、パンくずリスト、価格、星の内訳を伴う集計評価、最大2件の注目レビュー、すべての姉妹カラーバリエーション)です。あくまで公開されている商品ページのデータであり、アカウント、注文、支払い情報ではありません。
制約とよくある課題
- 利用条件が明示的。 Zappos の規約はサイトを利用するライセンスからデータマイニング、ロボット、データ収集・抽出ツールを除外し、さらに別途、商品一覧、説明文、画像、価格の収集や使用を禁止しています。
- セルフサービス型の公開 API がない。 Zappos には外部開発者向けの文書化された開発者プログラムがなく、スクレイピングして得られるものはすべて予告なく変わるストアフロント自体のレンダリングに対して実行されます。
- ストアフロントのボット防御。 他の大手 EC サイトと同様、Zappos はエッジで自動トラフィック防御を実行しており、素朴で大量の認証なしリクエストはチャレンジを受けると想定してください。
- 注目レビューはレビューの全コーパスではない。 商品ごとに最大2件のサイト側が選んだレビューが得られるだけで、全レビューのページ分割されたフィードではありません。
- カラーバリエーションがファンアウトする。 スタイルの完全なカバレッジを得るには、商品ごとに1回の取得ではなく、姉妹の
color_idすべてを反復処理する必要があります。 - 公開データのみ。 これは Zappos がすでに公開している商品ページのデータです。ログインを回避したりアカウントレベルの情報にアクセスしたりする手段では決してありません。
どこで使われるか
- 価格と特売の追跡 — シューズやアパレルについて、時間の経過とともに
priceとoriginal_price、on_saleの切り替わりを監視します。 - アソートメントリサーチ — 検索語に対して返されるブランドとスタイルのカバレッジを測定します。
- レビューリサーチ — 商品ごとの評価内訳と注目レビューの評判を追跡します。
- カラーバリエーションのカバレッジ — カタログやマーチャンダイジング分析のために、あるスタイルが展開しているすべての色を列挙します。
出典
収集を始める
まずは無料でお試しください: 任意の公開 URL を無料ウェブスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップ不要です。
検索と商品のエンドポイントをプレイグラウンドで試し、API ドキュメントでスキーマを確認し、料金をご覧ください。同じシューズ・アパレルのパターンをブランド直販のストアフロントで見るには、Nike をスクレイピングする方法をご覧ください。同じスニーカー市場のリセール側については、StockX をスクレイピングする方法をご覧ください。あわせてウェブスクレイピング API の選び方とウェブスクレイピングは合法かもご覧ください。
よくある質問
Zappos の検索はページネーションに対応していますか?
はい。/zappos/search は実際のページベースのページネーションを使用しており、1ページあたり最大100件の結果を取得できます。page_count を超えるページをリクエストしても、エラーではなく空の products 配列を伴う通常の200が返ります。
API で Zappos の商品のカスタマーレビューを取得できますか?
はい。/zappos/product/{productId} は Zappos 自身がサイト上で選んだ注目レビューを最大2件返します。各レビューには実際の投稿者名、日付、レビュー本文、評価の各項目が含まれます。まだレビューがない商品は空のリストを返します。
Zappos の商品について特定のカラーバリエーションを取得できますか?
はい。/zappos/product/{productId} に任意の colorId を渡すことができます。colorId を省略した場合や無効な値を渡した場合でも、失敗することなく実際のカラーバリエーションを使ってベースとなる商品が解決されます。