Tony Wang6 分で読めますVintedのスクレイピング方法(2026年版、API & Python)
Vintedのリスティング・商品・会員データを2026年にスクレイピングする3つの方法 — 自作Python、ノーコードツール、構造化APIそれぞれで取得できる内容と、法的な基礎知識を解説します。
Vintedを2026年にスクレイピングする最速の方法は、Vinted自身のHTMLを自分でパースするのではなく、カタログ検索・商品詳細・会員プロフィール・ブランド・カテゴリを正規化されたJSONとして返す構造化マーケットプレイスAPIを呼び出すことです。Pythonで自作スクレイパーを組むこともできますが、国別ドメイン、アンチボット対策、価格表示の形式によって、動き続けさせるコストが高くつきます。
Vintedはサードパーティの読み取りアクセス向けに汎用の公開APIを提供していません。Vinted Pro Integrationsは運用していますが、これはProセラーが自分の在庫と注文を管理するためのアローリスト制APIであり、外部チームがカタログを検索・リサーチする手段ではありません。リセール価格のリサーチ、ブランド追跡、市場間比較には、構造化スクレイピングAPIが現実的な選択肢になります。
Vintedのデータをスクレイピングする理由
- リセール価格リサーチ — 特定のブランド・サイズ・コンディションが実際にいくらで売れているか、出品価格との差を追跡する。
- ブランド・カテゴリのトレンド追跡 — どのブランドやカテゴリが、リスティング数やお気に入り数を時間とともに伸ばしているかを見る。
- 国をまたいだ市場リサーチ — Vintedは国別ロケールドメイン(vinted.fr、vinted.de、vinted.co.uk、vinted.itなど)を運用しているため、同じブランドでも市場ごとに価格が異なります。
- セラーのモニタリング — 特定のクローゼットのリスティング、評価、フォロワー数の伸びを追跡する。
- AI・データパイプライン — 正規化された中古ファッションのリスティングを、価格モデルやソーシングツール、アービトラージリサーチに供給する。
Vintedをスクレイピングするのは合法ですか?
Vintedの利用規約は自動化されたアクセスを制限しているため、スクレイピングはVintedとの契約上の問題であり、自動的に刑事上の問題になるわけではありません。米国では、サイトの利用規約が禁じている場合でも、公開されているページをスクレイピングすることはコンピュータ詐欺乱用防止法(CFAA)に違反しないという判断が裁判所で繰り返し示されています(下記に引用するhiQ Labs v. LinkedInを参照)。とはいえ、利用規約違反によってアカウントやIPがバンされる可能性は残りますし、会員の氏名や所在地といった個人データが関わる場合、EUのユーザーにはさらにGDPRが適用されます。
実務上のポイントは次のとおりです。
- 公開されているカタログ・商品・ブランド・カテゴリ・会員ページのみを収集し、ログインが必要なデータは対象にしないこと。
- robots.txtとレート制限を尊重すること — Vintedのrobotsファイルは検索インデックスを許可する一方で、AI学習用クローラーを明示的にブロックしています(
ai-train=no)。 - Vintedは国別ドメインを運用しているため、自分のユースケースにおいて同意や開示要件が法域によって異なるかどうかを確認すること。
- リスティングの写真や説明文は、ユースケースと著作権法が許す範囲を超えて再利用しないこと — 価格・ブランド・コンディションは事実ですが、商品写真や説明文はセラー自身のコンテンツです。
選択肢1: Pythonで自作する(そしてなぜ壊れるのか)
素朴なアプローチはカタログ検索ページを取得し、商品カードをパースするというものです。
import csv, requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.vinted.com/catalog",
params={"search_text": "leather jacket"},
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("[data-testid='grid-item']"):
title = card.select_one("[data-testid='item-title']")
price = card.select_one("[data-testid='item-price']")
rows.append({"title": title.get_text(strip=True) if title else None,
"price": price.get_text(strip=True) if price else None})
with open("vinted.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=["title", "price"]); w.writeheader(); w.writerows(rows)
# ...then keep these selectors alive, handle the SPA's client-rendered content, and paginate
一度は動きますが、そこからメンテナンスが始まります。
- クライアント側レンダリング。 Vintedのカタログページと商品ページはJavaScriptでハイドレーションされるため、プレーンな
requests.get()は空のシェルしか返さないことが多く、実際のDOMを取得するにはヘッドレスブラウザが必要です。 - アンチボット対策。 データセンターのIPはブロックまたはレート制限されるため、ローテーションするレジデンシャルプロキシと現実的なヘッダーが必要になります。
- 国別ドメインと通貨。 vinted.com、vinted.fr、vinted.de、vinted.co.uk、その他のロケールサイトは、同じ基盤カタログに対して異なる通貨とレイアウトを使っています。
- 価格フィールド。 表示されている価格は商品価格であり、チェックアウト時に別途「購入者保護」手数料が加算されます — 「価格」をパースするということは、ユースケースに合ったフィールドを選ぶということです。
- セレクタの陳腐化。 Vintedは定期的にグリッドや商品ページを刷新するため、手書きのCSSセレクタは予告なく壊れます。
選択肢2: ノーコード・既製ツール
ブラウザ拡張機能やポイント&クリック式のスクレイパーは検索結果を1ページ分エクスポートできますが、リセール価格やブランドトレンドのリサーチは、同じ検索をスケジュールに沿って再実行し、複数の国にまたがる履歴を保存し続ける作業です。これはスクリプトやcronジョブから呼び出せるAPIのほうが向いている、繰り返し発生するパイプライン処理です。
選択肢3: 構造化されたVinted API
Crawlora のVinted APIは、リクエスト処理・レンダリング・プロキシ・パース処理を、カタログ検索・商品詳細・会員プロフィール・ブランド・カテゴリ用のドキュメント化されたエンドポイントの背後にまとめています。
curl "https://api.crawlora.net/api/v1/vinted/catalog?search_text=jacket&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"
import requests
resp = requests.get(
"https://api.crawlora.net/api/v1/vinted/catalog",
headers={"x-api-key": "YOUR_API_KEY"},
params={"search_text": "jacket", "page": 1},
)
for item in resp.json()["data"]["items"]:
print(item["title"], item["price_raw"], item["brand"])
レスポンスは正規化されたJSONです(実際のフィールドはドキュメントで確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"search_text": "jacket",
"page": 1,
"source_url": "https://www.vinted.com/catalog?search_text=jacket",
"items": [
{
"id": "9595406652",
"title": "Vintage leather Cabelas Women's jacket",
"url": "https://www.vinted.com/items/9595406652-vintage-leather-cabelas-womens-jacket",
"brand": "Cabela's",
"size": "L / US 12-14",
"condition": "Good",
"price_raw": "$20.00",
"total_price_raw": "$21.70",
"favourite_count": 9,
"image_url": "https://images1.vinted.net/t/01_00ebe_Runxp7FBSGM86vRdXFhYhM4A/310x430/3e52418b.webp"
}
]
}
}
price_raw(商品価格)とtotal_price_raw(商品価格に購入者保護を加えたもの)の違いに注意し、ユースケースに実際に必要なフィールドを選んでください。検索結果から、商品詳細・会員プロフィール・ブランドやカテゴリでの絞り込みを取得できます。
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/vinted"
item = requests.get(f"{base}/item", headers=h, params={"id": "9595406652"}).json()["data"]
member = requests.get(f"{base}/member", headers=h, params={"id": "3159465141"}).json()["data"]
brand_items = requests.get(f"{base}/brand", headers=h, params={"id": "386688", "price_from": "10", "price_to": "50"}).json()["data"]
categories = requests.get(f"{base}/categories", headers=h).json()["data"]["categories"]
catalog、brand、categoryはいずれもprice_from、price_to、order、pageを受け付けるため、検索・ブランドのリスティング・カテゴリブラウズを同じ方法で絞り込み・ページ送りできます。
収集できるもの
- カタログ検索結果: タイトル、ブランド、サイズ、コンディション、価格と合計価格、お気に入り数、画像
- 商品詳細: 特定リスティングの説明文、素材、色、カテゴリ、写真
- 会員プロフィール: ユーザー名、所在地、評価、フォロワー・フォロー数
- ブランド・カテゴリブラウズ(カタログ検索と同じ価格・ページネーションフィルタ付き)
- 独自の分類体系を構築するためのブランド全リストとカテゴリツリー
制約
- サードパーティ向けの読み取りAPIがない。 Vinted Pro Integrationsはアローリスト制のProセラーが自分の在庫を管理するためのものであり、リサーチや一括読み取り用のAPIではないため、フルカタログへのアクセスは結局スクレイピングが必要です。
- ロケールの分断。 価格と通貨は国別ドメインごとに異なるため、市場を比較するには各ロケールを個別にクエリし、自分で通貨を正規化する必要があります。
- 価格の曖昧さ。 商品価格と購入者保護込みの合計は別フィールドなので、集計する前に分析にどちらが必要かを決めておく必要があります。
- アンチボットとレンダリング。 クライアント側レンダリングとIPベースのブロッキングにより、プレーンなHTTPリクエストは信頼できません — 構造化APIならヘッダー、レンダリング、リトライを1つのキーの背後で処理してくれます。
- メディアには著作権がある。 価格・ブランド・コンディションは収集できる事実ですが、リスティングの写真や説明文には著作権があります — ユースケースと法律が許す範囲を超えて再公開しないでください。
どこで使われるか
- ブランド・カテゴリ別に出品価格と実際の売却価格を比較するリセール・アービトラージリサーチ
- 国やロケールドメインごとに区分した中古ファッション市場レポート
- 競合リサーチのためのセラー・クローゼットモニタリング
- ブランド・カテゴリカタログを価格設定やソーシングツールに供給するエンリッチメントパイプライン
出典
さっそく始める
まずは無料で試す: 任意の公開URLを無料Webスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認しましょう — サインアップ不要です。
Vintedのデータは、他のリセールマーケットプレイスAPIと組み合わせることでクロスプラットフォームの価格比較に役立ちます — スニーカー・ストリートウェアのリセールについてはStockXをスクレイピングする方法、一般的な中古品・オークションのリスティングについてはeBayをスクレイピングする方法、ハンドメイド・ヴィンテージ商品についてはEtsyをスクレイピングする方法をご覧ください。Playgroundでエンドポイントをテストし、APIドキュメントでリクエスト・レスポンスのスキーマを確認し、料金ページでクレジットコストを確認してから始めましょう。自分のユースケースで合法かどうか不安な場合は、まずWebスクレイピングは合法か2026年版をお読みください。
よくある質問
Vintedに公式の公開APIはありますか?
サードパーティの読み取りアクセス向けにはありません。Vintedは Vinted Pro Integrations を運用していますが、これはProセラーが自分のリスティング・注文・Webhookを管理するためのアローリスト制APIであり、外部のリサーチや一括カタログ読み取りには開放されていません。そのため検索結果、ブランドのリスティング、会員プロフィールを取得するには、公開ページをスクレイピングするか構造化スクレイピングAPIを使う必要があります。
Vintedをスクレイピングするのは合法ですか?
公開されているページをスクレイピングすることは、一般に非公開アカウントへの不正アクセスとは区別して扱われており、米国の裁判所はサイトの利用規約が禁じている場合でもCFAA違反にはあたらないとしています。ただし、Vintedの利用規約は自動化されたアクセスを制限しているため、違反は契約上の問題となり、アカウントやIPがバンされる可能性があります。公開データのみを収集し、robots.txtを尊重し、これは情報提供であって法的助言ではないことを念頭に置いてください。
なぜVintedの価格は2つの数字で表示されるのですか?
商品価格(price_raw)はセラーが設定した価格です。合計価格(total_price_raw)は、チェックアウト時に課金されるVintedの購入者保護手数料を加えたものです。分析に必要なフィールドを選んでください — セラーが設定した価格のリサーチには商品価格を、購入者が実際に支払う金額には合計価格を使います。
Vintedの商品からセラーや会員のデータを取得できますか?
商品詳細のレスポンスには、意図的にセラー情報が含まれていません。セラーの公開プロフィールを取得するには、セラーの数値の会員IDを指定して会員エンドポイントを呼び出します。これによりユーザー名、大まかな所在地、評価、フォロワー数が返されますが、最終ログイン日時のようなアクティビティデータは意図的に除外されています。
キーワードではなくブランドやカテゴリでVintedのリスティングを検索するにはどうすればよいですか?
ブランドエンドポイントには数値のブランドID(商品のブランドリンクまたはブランド一覧から取得)を、カテゴリエンドポイントには数値のカテゴリID(カテゴリツリーから取得)を指定して使用します。どちらもキーワードによるカタログ検索と同じ price_from、price_to、order、page のフィルタに対応しています。
Vintedの価格は国によって異なりますか?
はい。Vintedはvinted.fr、vinted.de、vinted.co.uk、vinted.itなど複数の国別ロケールドメインを運用しており、それぞれが同じ基盤カタログに対して独自の通貨とリスティングプールを持っています。そのため、市場間の価格リサーチには各ロケールを個別にクエリし、自分で通貨を正規化する作業が必要です。
自作のVintedスクレイパーが壊れる原因は何ですか?
クライアント側レンダリング(カタログページと商品ページはJavaScriptでハイドレーションされるため、プレーンなHTTPリクエストは空のシェルを返すことが多い)、アンチボットのIPブロッキング、国別ドメインと通貨の違い、そしてVintedがグリッドや商品ページを刷新するたびに壊れるCSSセレクタが主な原因です。