Tony Wang7 分で読めますZalando のスクレイピング方法(2026年版 API & Python)
2026年に Zalando の検索・商品・カテゴリデータを25の欧州市場で取得する3つの方法——DIY の Python、ノーコードツール、または構造化 API。
2026年に Zalando をスクレイピングする最も速い方法は、Zalando の HTML を自分でパースするのではなく、正規化された JSON を返す構造化 API を呼び出すことです——キーワード検索、カテゴリ・ブランド閲覧、商品詳細、検索ボックスのオートコンプリートが対象になります。Python で DIY スクレイパーを組むこと自体は可能ですが、Zalando の国別ストアフロント、GraphQL でハイドレートされたページ、アンチボット対策のせいで、動き続けさせるコストが高くつきます。
Zalando はカタログを読み取るための公開セルフサービス API を提供していません。すでに Zalando で販売しているブランドや小売業者向けにパートナープログラム(zDirect)を運用しており、出品、価格、注文を管理できますが、これはオンボーディングが必要なマーチャント向けツールであり、外部チームがストアフロントを検索・調査する手段ではありません。価格モニタリング、アソートメント調査、市場間比較には、構造化されたスクレイピング API を使うのが現実的なルートです。
なぜ Zalando のデータをスクレイピングするのか?
- 価格モニタリング — 特定の SKU の価格、割引、在庫状況が1つのストアフロント上で時間とともにどう動くかを追跡します。
- 市場間の価格比較 — 同じ商品でも Zalando の25の国別ドメインで価格が異なる場合があります。同一ブランドについて de と fr と gb を比較します。
- カテゴリとトレンドのリサーチ — どのブランド、シルエット、カテゴリが出品ボリュームや割引幅を伸ばしているかを観察します。
- 競合とアソートメントの追跡 — 競合が特定カテゴリでどのブランドを扱っているか、シーズンを通してカタログがどう変化するかを確認します。
- AI・データパイプライン — 正規化されたファッション小売のリスティングを、価格モデルやアソートメントツール、リテールインテリジェンスのダッシュボードに投入します。
Zalando をスクレイピングするのは合法か?
Zalando の標準利用規約は「ソフトウェア、ロボット、クローラー、スパイダー、または何らかの自動化システムやスクリプト化された挙動を使用して行われた」注文を拒否・キャンセルする権利を留保していますが、この条項が対象にしているのは自動化されたチェックアウト(限定ドロップを買い占めるボット)であり、閲覧や公開ページの読み取り全般を禁じるものではありません。Zalando の robots.txt は /api/*、/cart/*、/wardrobe/*、/myaccount/*、/reco-catalog/、/assistant、/opinions* という特定のパス群を disallow していますが、カタログ・検索・商品ページに対する一括の disallow はなく、AI クローラー固有のルールもありません。米国では、たとえサイトの利用規約が制限していても、公開アクセス可能なページをスクレイピングすること自体はコンピュータ詐欺および濫用防止法(CFAA)に違反しないと裁判所が繰り返し判示しています(下記に引用する hiQ Labs v. LinkedIn を参照)——とはいえ利用規約違反によってアカウントや IP が禁止される可能性は残りますし、EU のユーザーは個人データが関わる場合さらに GDPR の対象になります。
実務上のポイント:
- 収集するのは公開されている検索、カテゴリ、商品、オートコンプリートのデータのみにとどめ、カート、ワードローブ、アカウントのようなログインが必要なページは対象にしないこと。
- robots.txt とレート制限を尊重し、1つの市場のストアフロントに同時リクエストを浴びせないこと。
- Zalando の価格と在庫は国別ドメインと通貨によって異なるため、1つの価格がどこでも通用すると仮定せず、各市場を別々のデータセットとして扱うこと。
- 商品写真やマーケティングコピーを、ユースケースと著作権法が許す範囲を超えて再利用しないこと。価格、ブランド、SKU、サイズの在庫状況は事実ですが、画像や説明文は Zalando またはブランドのコンテンツです。
選択肢1: Python で DIY する(そしてなぜ破綻するか)
素朴なアプローチは検索結果ページを取得し、商品カードをパースするというものです。
import csv, requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://en.zalando.de/catalogue/",
params={"q": "running shoes"},
headers={"User-Agent": "Mozilla/5.0", "Accept-Language": "en-US,en;q=0.9"},
)
soup = BeautifulSoup(resp.text, "html.parser")
rows = []
for card in soup.select("article[data-testid='catalog-article']"):
name = card.select_one("h3")
price = card.select_one("[data-testid='price-formatted']")
rows.append({"name": name.get_text(strip=True) if name else None,
"price": price.get_text(strip=True) if price else None})
with open("zalando.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=["name", "price"]); w.writeheader(); w.writerows(rows)
# ...then keep these selectors alive, handle GraphQL-hydrated content, and pick the right market domain
一度は動きますが、そこからメンテナンスが始まります。
- クライアントサイド・GraphQL でハイドレートされたレンダリング。 検索とサジェストの結果は内部の GraphQL API(
/api/graphql/)によって支えられているため、素のrequests.get()はしばしば空のシェルしか返しません。実際の商品データを得るにはヘッドレスブラウザか、正確な GraphQL ペイロードが必要です。 - 25の別々の国別ストアフロント。
en.zalando.de、www.zalando.fr、www.zalando.co.uk、www.zalando.it、そのほか21のドメインが、それぞれ独自のドメイン、通貨を持ち、多くのカテゴリでは同じカテゴリでも独自の現地語 URL スラッグを持ちます。 - アンチボット対策。 データセンターの IP はレート制限やブロックを受けるため、ローテーションするレジデンシャルプロキシと自然なヘッダーが必要になります。
- マルチサイズのバリアント。 1つの商品ページが複数のサイズをカバーしており、それぞれが独自の SKU、GTIN、価格、在庫状況を持ちます。「価格」をパースするというのは、ユースケースに合った正しいバリアントを選び出すということです。
- セレクタの変動。 Zalando は定期的にグリッドや商品ページを再設計し、手書きの CSS セレクタを予告なく壊します。
選択肢2: ノーコード・既製ツール
ブラウザ拡張機能やポイント&クリック型のスクレイパーは、検索結果の1ページ分をエクスポートできますが、価格モニタリングと市場間比較には、同じクエリを複数の国別ドメインに対してスケジュール実行し、履歴を保存し続けることが必要です。これは繰り返し実行されるパイプライン処理であり、手動のエクスポートツールよりも、スクリプトや cron ジョブから呼び出せる API のほうが適しています。
選択肢3: 構造化された Zalando API
Crawlora のZalando APIは、リクエスト処理、レンダリング、パースを、検索、カテゴリ・ブランド閲覧、商品詳細、オートコンプリート、対応市場一覧のための文書化されたエンドポイントの背後にラップしています。カタログ系のエンドポイントはすべて明示的な market を必要とします。
まずは市場一覧から始めましょう。これは以降のすべての呼び出しの参照元になります。
curl "https://api.crawlora.net/api/v1/zalando/markets" \
-H "x-api-key: $CRAWLORA_API_KEY"
{"code":200,"msg":"OK","data":{"count":25,"markets":[
{"code":"de","domain":"en.zalando.de"},
{"code":"fr","domain":"www.zalando.fr"},
{"code":"gb","domain":"www.zalando.co.uk"},
{"code":"it","domain":"www.zalando.it"}
]}}
続けて、特定の市場をキーワードで検索します。
import requests
BASE = "https://api.crawlora.net/api/v1/zalando"
headers = {"x-api-key": "YOUR_API_KEY"}
resp = requests.get(f"{BASE}/search", headers=headers, params={"q": "running shoes", "market": "de"})
for p in resp.json()["data"]["products"]:
print(p["sku"], p["brand"], p["name"], p["price"], p["currency"])
レスポンスは正規化された JSON です(正確なフィールドはドキュメントで確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"query": "running shoes",
"market": "de",
"count": 24,
"total_count": 4911,
"source_url": "https://en.zalando.de/catalogue/?q=running+shoes",
"fetched_at": "2026-07-01T12:00:00Z",
"products": [
{
"sku": "N1241A1HR-I11",
"name": "PEGASUS 42 SE - Road running shoes",
"brand": "Nike Performance",
"url": "https://en.zalando.de/nike-performance-pegasus-42-se-road-running-shoes-n1241a1hr-i11.html",
"image": "https://img01.ztat.net/article/spp-media-p1/example.jpg?imwidth=400",
"silhouette": "LOW_SHOE",
"price": 97.95,
"original_price": 149.95,
"discount_percent": 52,
"currency": "EUR"
}
]
}
}
検索やカテゴリ結果から得た同じ sku と market を product に渡せば、サイズごとのバリアントを含む完全な詳細が取得できます。
product = requests.get(f"{BASE}/product", headers=headers, params={"sku": "N1241A1HR-I11", "market": "de"}).json()["data"]["product"]
for v in product["variants"]:
print(v["size"], v["sku"], v["price"], v["availability"])
{"sku":"ONM11A03W-A12","name":"CLOUD 6 - Trainers - white white","brand":"On","color":"white white/white",
"price":160,"currency":"EUR",
"variants":[{"size":"36","sku":"ONM11A03W-A120005000","gtin":"7615537206202","price":160,"currency":"EUR","availability":"InStock"}]}
カテゴリやブランドのスラッグを閲覧し(スラッグは市場ごとに異なります——de/gb では shoes、fr では chaussures、it では scarpe)、部分的なクエリをオートコンプリートすることもできます。
category = requests.get(f"{BASE}/category", headers=headers, params={"category": "shoes", "market": "de"}).json()["data"]
suggest = requests.get(f"{BASE}/suggest", headers=headers, params={"q": "running sho", "market": "de"}).json()["data"]["suggestions"]
# suggest -> ["running shoes", "running shoes nike", "running shoes adidas", ...]
search と category はどちらも、結果の最初のページに加えて、アップストリームの全マッチ件数である total_count を返します——さらに深いページネーションはまだ利用できないため、total_count は最後まで辿れるものというより、トレンドの目安として扱ってください。
何を収集できるか
- 検索結果: SKU、名前、ブランド、価格、元の価格、割引率、シルエット、画像を、1つの市場にスコープして
- カテゴリとブランドの一覧、そのカテゴリのアップストリーム
total_count - 商品詳細: ブランド、色、説明、全画像、サイズごとのバリアント(SKU、GTIN、価格、通貨、在庫状況)
- 部分的なクエリに対する検索ボックスのオートコンプリート候補
- ドメイン付きの、対応する25市場の完全なリスト
制約
- 公開カタログ API がない。 Zalando の Shop Public API は一般公開されないままアーカイブされ、zDirect パートナー API はマーチャント限定です。そのため外部からのカタログへのフルアクセスは、依然としてスクレイピングを意味します。
- 市場ごとの分断。 価格、通貨、そしてカテゴリのスラッグまでもが国ごとに異なります。市場間の比較には各市場を個別にクエリし、自分で通貨を正規化する必要があります。
- 最初のページの結果のみ。 検索とカテゴリの呼び出しは、Zalando がレンダリングする最初のページと
total_countを返します——さらに深いページネーションはまだサポートされていません。 - アンチボットと GraphQL でハイドレートされたレンダリング。 Zalando のストアフロントに対する素の HTTP リクエストは信頼できません。構造化された API は、ヘッダー、レンダリング、リトライを1つの API キーの背後で処理します。
- メディアには著作権がある。 価格、ブランド、SKU、在庫状況は収集できる事実ですが、商品写真やマーケティングコピーには著作権があります。ユースケースと法律が許す範囲を超えて再公開しないでください。
どこで使われるか
- 特定のブランドやカテゴリの、1つまたは複数のストアフロントにおける価格・割引モニタリング
- 市場をまたいだファッション価格比較と裁定調査
- ブランド、カテゴリ、シルエットで区分したアソートメント・トレンド追跡
- 正規化されたアパレル・フットウェアデータを価格やリテールインテリジェンスのツールに投入するエンリッチメントパイプライン
出典
収集を始める
まずは無料で試す: Free Web Scraperで任意の公開 URL を実行するか、Anti-Bot Checkerでサイトがボットをブロックしているかを確認できます——サインアップ不要です。
Zalando のデータは、プラットフォーム横断のリサーチのために他のファッションマーケットプレイス API とも相性が良いです——中古ファッションの価格についてはVinted のスクレイピング方法を、ハンドメイド・ビンテージ商品についてはEtsy のスクレイピング方法を、米国の総合小売との比較についてはTarget のスクレイピング方法をそれぞれ参照してください。まずはPlaygroundでエンドポイントをテストし、API ドキュメントでリクエストとレスポンスのスキーマを読み、料金ページでクレジットコストを確認してください。自分のユースケースにとって合法かどうか不安な場合は、まず2026年、ウェブスクレイピングは合法か?を読んでください。
よくある質問
Zalando には商品や検索データ向けの公開 API がありますか?
ありません。Zalando の Shop Public API は一般公開されないままアーカイブされ、zDirect パートナープログラム API はすでに Zalando で販売しているマーチャントが自社の出品、価格、注文を管理するためのものであり、外部チームがカタログを検索・調査するためのものではありません。
API で Zalando の商品を検索するにはどうすればよいですか?
キーワードと市場コード(例: de、fr、gb)を Crawlora の /zalando/search エンドポイントに送ると、SKU、名前、ブランド、価格、割引、画像といった正規化された商品結果が構造化 JSON として返ってきます。
なぜすべての Zalando エンドポイントに market パラメータが必要なのですか?
Zalando は欧州の国ごとに完全に独立したストアフロントを運用しており、合計25市場あります。それぞれが独自のドメイン、通貨、そしてしばしば独自の現地語カテゴリスラッグを持ちます。デフォルトのストアフロントは存在しないため、検索・カテゴリ・商品の呼び出しはすべて明示的な market を必要とし、同じ商品でも市場によって価格が異なる場合があります。
国をまたいで Zalando の価格を比較できますか?
できますが、各市場を個別にクエリする必要があります。同じ検索または商品エンドポイントを市場コードごとに(例: de、fr、it)1回ずつ呼び出し、返ってきた price と currency のフィールドを自分で比較してください。Crawlora が複数の市場を1つのレスポンスにまとめることはありません。
Zalando をスクレイピングするのは合法ですか?
Zalando の利用規約は、ボットやスクリプト化された自動化によって行われた注文を拒否・キャンセルする権利を留保しており、robots.txt は /api/*、/cart/*、/myaccount/* などの特定のパス群を disallow していますが、カタログや商品ページに対する一括の disallow はありません。公開されている検索・カテゴリ・商品データを収集することは、ログインが必要な領域に触れるよりもリスクの低い出発点ですが、これは法的助言ではありません。より詳しい内容は「2026年、ウェブスクレイピングは合法か?」を参照してください。
Zalando API の利用に Zalando のアカウントや API キーは必要ですか?
呼び出す側に Zalando のアカウントや API キーは不要です。必要なのは Crawlora の API キーだけです。
Zalando の商品について、すべてのサイズと価格のバリアントを取得できますか?
できます。/zalando/product エンドポイントは、利用可能なサイズごとに1エントリを持つ variants 配列を返し、各エントリは独自の SKU、GTIN、価格、通貨、在庫状況を持ちます。