Tony Wang6 分で読めます中古車リストのスクレイピング方法【2026年版】(API & Python)
2026年、CarMax・Autotrader・Cars.com の中古車リストをスクレイピングする方法 — 価格、走行距離、ディーラー、履歴データを DIY、ノーコード、または構造化 API で取得します。
2026年に中古車リストをスクレイピングする最も手早い方法は、各サイトの JavaScript 中心の在庫ページ用に個別のパーサーを構築・維持するのではなく、主要サイトにまたがって正規化された JSON を返す構造化 API を呼び出すことです。CarMax、Autotrader、Cars.com は米国最大級の3つの中古車マーケットプレイスであり、いずれもセルフサービス型の公開 API を持たず、それぞれが本格的なアンチボット基盤でページを防御しています。このガイドでは3サイトすべてに対する3つのアプローチを取り上げ、それぞれが何を返し、DIY がどこで破綻し、そして法律上の基本を解説します。
なぜ中古車リストをスクレイピングするのか?
CarMax、Autotrader、Cars.com にまたがる車両リストデータは、次のような用途を支えます。
- 価格インテリジェンス — あるモデルの表示価格が走行距離、トリム、市場とともにどう動くかを追跡し、割安なリスティングを見つけられます。
- 在庫・市場リサーチ — 特定のメーカー/モデルが市場にどれだけ、どこに出回っているかを測定できます。
- お得情報発見ツール — サイト自身が算出しているのと同じ価格シグナルを使って「お得なリスティングにフラグを立てる」機能を構築できます。
- ディーラー分析 — あるディーラーの在庫回転率、価格戦略、評価を時系列で追跡できます。
- 減価償却・需要モデリング — 複数サイトのリストデータを組み合わせて、車両の価値が経年・走行距離とともにどう動くかをモデル化できます。
中古車リストをスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
3サイトすべてが単純な HTML ではなくクライアントサイドの JSON からリスティングをレンダリングしているため、DIY のスクレイパーは各ページが呼び出す裏側の API に到達する必要があります。
import requests
# Cars.com renders from a public GraphQL endpoint
resp = requests.post(
"https://graph.cars.com/graphql/api",
json={"query": "...", "variables": {"stockType": "used", "zip": "78701"}},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
デモは動きますが、その後破綻します。
- 利用規約が明示的。 Autotrader の規約は「robots、screen scrapers、spiders」を直接名指ししています。曖昧なケースではありません。
- エッジで本格的なアンチボット。 CarMax への素の未認証リクエストはページに到達する前にブロックされます(このガイドの調査中、通常の
robots.txtの取得に対して Akamai 風の「Access Denied」がエッジから返されました)。同様に Cars.com も同じリクエストに対して Cloudflare のチャレンジを前面に出してきます。素朴なrequests呼び出しはすぐにブロックされ、ブラウザベースのスクレイパーはこうした防御が更新されるたびに継続的なメンテナンスが必要になります。 - 3つの異なるバックエンド、3つの異なる形。 CarMax は Azure Front Door 上でモバイル API を動かし
stock_numberを主キーとしています。Autotrader はmake/model/trimを別々のcode/nameフィールドを持つオブジェクトとしてネストし、新車と中古車の両方の在庫を1つのエンドポイントから配信します。Cars.com は UUID のlisting_idをキーとする公開 GraphQL API を動かしています。共通のスキーマは存在せず、1つではなく3つのパーサーを書いて維持することになります。 - 公式のサードパーティ API がない。 実際の在庫フィードはディーラー/DMS 連携(vAuto、HomeNet)を通じて FTP/CSV またはパートナー API 経由で動いており、認可されたディーラーに限定されています。価格インテリジェンス製品を構築するサードパーティ開発者には利用できません。
選択肢2: ノーコードツール
各サイト個別に対応するマーケットプレイスのスクレイパーアクターが存在し、単発の取得には向いていますが、サイトをまたいだビューを得るには3つの別々のスキーマを持つ3つの別々のツールに戻ることになり、DIY と同じアンチボットの脆さを引き継ぎます。
選択肢3: 構造化された中古車 API
繰り返し実行できるサイト横断的なワークフローには、CarMax、Autotrader、Cars.com のスクレイピング API がそれぞれ正規化された JSON を返し、ページのパースもエッジ防御への追随も不要です。CarMax をメーカーと価格帯で検索するには次のようにします。
curl "https://api.crawlora.net/api/v1/carmax/search?make=Toyota&max_price=25000&zip=78701" \
-H "x-api-key: $CRAWLORA_API_KEY"
3サイトすべての詳細を Python で取得します。それぞれの検索が、それぞれの詳細取得に必要な id を返します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1"
carmax_hits = requests.get(f"{base}/carmax/search", headers=h, params={"make": "Toyota", "max_price": 25000}).json()["data"]["vehicles"]
carmax_detail = requests.get(f"{base}/carmax/vehicle/{carmax_hits[0]['stock_number']}", headers=h).json()["data"]
autotrader_hits = requests.get(f"{base}/autotrader/search", headers=h, params={"make": "Toyota", "zip": "78701"}).json()["data"]["vehicles"]
autotrader_detail = requests.get(f"{base}/autotrader/vehicle/{autotrader_hits[0]['id']}", headers=h).json()["data"]
carsdotcom_hits = requests.get(f"{base}/carsdotcom/search", headers=h, params={"zip": "78701", "stock_type": "used"}).json()["data"]["vehicles"]
carsdotcom_detail = requests.get(f"{base}/carsdotcom/vehicle/{carsdotcom_hits[0]['listing_id']}", headers=h).json()["data"]
CarMax の検索レスポンスは正規化された JSON です(実際のフィールド。ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"total_count": 91136,
"vehicles": [
{
"stock_number": 28187774,
"vin": "1FMJK1K89REA27006",
"year": 2024,
"make": "Ford",
"model": "Expedition Max",
"mileage": 41406,
"price_info": { "price": 45998, "is_price_reduced": true, "previous_price": 46998 },
"store": { "id": 7124, "name": "Canoga Park" },
"prior_uses": ["Leased Vehicle", "Rental"],
"url": "https://www.carmax.com/car/28187774"
}
]
}
}
CarMax の車両詳細には history(事故歴と所有者数)と warranties が加わります。Autotrader の詳細には vehicle_history_flags(例: NO_SALVAGE_TITLE、NO_ACCIDENTS_REPORTED)と、新車在庫向けの msrp/sale_price の両方が含まれます。Cars.com の詳細は3社の中で最も価格志向が強く、算出済みの deal_rating を返します。
{
"deal_rating": {
"rating": "fair",
"good_price_min": 17591,
"good_price_max": 19566,
"predicted_price": 17950,
"predicted_price_difference": -4042
}
}
サイトごとにリスティング1件につき1行を、存在する場合は VIN(3社すべてを直接比較できる唯一のフィールドです)をキーにして保存し、価格変動と新規在庫を追跡するためスケジュールを組んで再実行しましょう。
収集できるもの
サイトごとの公開されているリスティングデータです。検索結果(年式、メーカー、モデル、トリム、走行距離、価格、外装/内装カラー、トランスミッション、燃料タイプ、ディーラー/店舗)、車両の詳細(スペック、装備、CarMax が掲載する場合の保証、Cars.com の deal_rating、Autotrader の vehicle_history_flags)、CarMax の店舗所在地と「ブランド別で見る」タクソノミー、そして Autotrader のディーラープロフィール(名前、評価、住所、現在の在庫数)。あくまで公開されているリスティングの事実のみであり、完全な車両履歴レポートではありません。
制約とよくある課題
- サイト間で共通のスキーマがない。 取り込み時点で正規化しましょう。stock number や listing id はサイト固有なので、利用可能な場合は VIN で照合してください。
- 3サイトすべてに本格的なアンチボット。 素朴なリクエストには CarMax の Akamai 級、Cars.com の Cloudflare によるエッジレベルのチャレンジを想定してください。
- Autotrader では新車と中古車が混在。 中古在庫だけが欲しい場合は
listing_type/conditionでフィルタしてください。 - 価格と在庫の入れ替わりが速い。 ディーラーは数か月ではなく数日で車を売却または再値付けします。スナップショットを信頼するのではなく、スケジュールを組んで再取得しましょう。
- 公開データのみ。 これはリスティングページのデータであり、有料の車両履歴レポートではなく、ディーラーや購入者の個人連絡先に到達する手段でもありません。
どこで使われるか
- 価格インテリジェンス — 走行距離やトリムに対する表示価格を追跡し、Cars.com が公開しているのと同じ
deal_rating風のシグナルを使って割安なリスティングにフラグを立てられます。 - 市場リサーチ — メーカー、モデル、地域別に在庫の厚みと回転率を測定できます。
- ディーラー分析 — 特定のディーラーの価格設定と在庫を時系列で観察できます。
出典
収集を始める
まずは無料でお試しください: 任意の公開 URL を無料ウェブスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップ不要です。
検索エンドポイントをプレイグラウンドで試し、API ドキュメントでスキーマを確認し、料金をご覧ください。取引の反対側については、求人情報のスクレイピング方法が、まったく異なる市場向けに同じ「セルフサービス API がなく、ベンダーごとに統合する」という課題を扱っています。同じポータルごとのパターンの不動産版については、不動産リストのスクレイピング方法をご覧ください。あわせてウェブスクレイピング API の選び方とウェブスクレイピングは合法かもご覧ください。
よくある質問
CarMax、Autotrader、Cars.com には公式 API がありますか?
3社ともセルフサービス型の公開 API はありません。実際の在庫フィードはディーラー/DMS 連携(vAuto、HomeNet)を通じて FTP/CSV またはパートナー API 経由で流れ、認可されたディーラーに限定されており、サードパーティ開発者には利用できません。サイト横断的な価格・在庫リサーチには構造化 API が現実的な選択肢です。
中古車リストのスクレイピングは合法ですか?
リスティングの事実(年式、メーカー、モデル、価格、走行距離、VIN)には著作権が及びませんが、各サイトの規約は自動アクセスを制限しています。Autotrader の規約は robots、screen scrapers、spiders を明示的に名指ししています。公開されているリスティングの事実にとどめ、レート制限を尊重し、リスティングページを通じて完全な有料車両履歴レポートを取得しようとしないでください。法的助言ではありません。
サイト間でリスティングの価格をどう比較すればいいですか?
VIN で照合してください。stock number や listing id はサイト固有ですが、VIN は CarMax、Autotrader、Cars.com の3社を直接比較できる唯一のフィールドです。各サイトを検索し、結果から VIN を解決してから結合します。
そのリスティングがお得かどうかはどのサイトでわかりますか?
Cars.com は車両詳細で算出済みの deal_rating(fair/good/great)を返し、predicted_price と good_price_min/max の範囲をそのまま利用できます。CarMax と Autotrader はこれを算出していませんが、各サイトの価格・走行距離・トリムのデータから同様のシグナルを自分で構築できます。
ディーラーの在庫を丸ごと取得できますか?
3社のうち2社では可能です。Autotrader の /autotrader/dealer/{id} はディーラープロフィールと現在の在庫の最初のページを返します。CarMax の /carmax/stores と /carmax/store/{id} は物理的な店舗所在地を返します。Cars.com の検索は直接のディーラー検索の代わりに zip/radius フィルタを受け付けます。
Carfax のような車両履歴レポートは含まれますか?
含まれません。返ってくるのは各サイト自身のリスティングページが公開している内容 — サイト自身が公開している場合の事故歴/所有者数や以前の使用状況フラグ(CarMax の history オブジェクト、Autotrader の vehicle_history_flags)— であり、別途ライセンスされた有料製品である完全な Carfax や AutoCheck のレポートではありません。
新車のリスティングも含まれますか?
Autotrader は1つの検索エンドポイントに新車と中古車の在庫を混在させています。中古車だけが欲しい場合は listing_type または condition でフィルタしてください。CarMax と Cars.com のこのガイドで扱うエンドポイントの在庫は、設計上、中古車のみです。