Extraction des annonces automobiles : Cars.com, Autotrader et CarGurus pour des informations sur les prix
Les informations sur les prix des concessionnaires se trouvent sur Cars.com, Autotrader et CarGurus — les mêmes voitures, à des prix différents selon le code postal et publiées partout. Voici comment les extraire, les dédupliquer par VIN, et contourner les barrières anti-bot.
Les informations sur les prix des concessionnaires ne se trouvent pas en un seul endroit. La même voiture d'occasion est répertoriée sur Cars.com, Autotrader et CarGurus en même temps, à des prix différents selon le code postal de l'acheteur, et chaque site protège ses pages avec une protection anti-bot. Bien extraire cela consiste moins à analyser une page qu'à trois choses : filtrer les recherches pour atteindre chaque annonce, dédupliquer le même véhicule sur plusieurs sources par VIN, et contourner les barrières sans une flotte d'IP brûlées. Ce guide couvre les trois, avec du code que vous pouvez adapter à n'importe lequel des grands sites d'annonces.
Ce qu'une annonce automobile vous offre
Chaque annonce de véhicule est un enregistrement dense une fois analysé : année, marque, modèle et version ; prix et kilométrage ; le VIN ; type de carrosserie, transmission, carburant, cylindres et portes ; couleur intérieure et extérieure ; un numéro de stock ; la liste des caractéristiques ; des images ; et les détails du concessionnaire plus une évaluation de l'offre sur les sites qui en calculent une. C'est un ensemble complet de données d'évaluation par ligne. Les champs autour desquels vous construisez votre pipeline sont le prix, le kilométrage, le VIN et le concessionnaire — tout le reste est un enrichissement.
Filtrer d'abord : atteindre chaque annonce
Les sites d'annonces paginent en tailles de page fixes (généralement 20 par page) et limitent la profondeur d'une recherche unique — souvent autour de 1 000 résultats au total. Si une recherche correspond à plus de voitures que cela, les extras sont simplement inaccessibles via la pagination. La solution est la segmentation : diviser une recherche large en recherches plus étroites par marque, modèle, gamme d'années, tranche de prix ou code postal pour que chacune reste sous la limite, puis unir les résultats. Cars.com, utilement, encode tout cela dans l'URL, vous permettant de construire des recherches de manière programmatique.
from urllib.parse import urlencode
def search_url(zip_code, make="", model="", max_price="", year_min=""):
params = {
"stock_type": "used",
"makes[]": make,
"models[]": model,
"list_price_max": max_price,
"year_min": year_min,
"maximum_distance": "all",
"zip": zip_code,
"page_size": 20,
"sort": "listed_at_desc",
}
return "https://www.cars.com/shopping/results/?" + urlencode(params)
print(search_url("10001", make="toyota", model="camry", year_min=2020))

Contourner la barrière : proxies résidentiels
Cars.com est derrière Cloudflare ; d'autres sites automobiles utilisent Imperva avec hCaptcha ou reCAPTCHA qui se déclenchent sous charge. Une IP de centre de données martelant les pages d'annonces est rapidement mise au défi. Les proxies résidentiels de vrais FAI ressemblent à des acheteurs ordinaires, et leur rotation répartit les requêtes pour qu'aucune adresse unique ne dépasse la limite de taux. Gardez un délai de 2 à 5 secondes entre les requêtes — le rythme est aussi important que l'IP. Pour des extractions petites et occasionnelles, un pool de centre de données est suffisant ; pour une surveillance continue à grande échelle, les résidentielles font la différence entre une exécution qui se termine et une qui s'arrête sur un CAPTCHA.
import requests, time, random
PROXY = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": PROXY, "https": PROXY}
HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"}
def fetch(url):
r = requests.get(url, proxies=proxies, headers=HEADERS, timeout=20)
r.raise_for_status()
time.sleep(random.uniform(2, 5)) # polite, and harder to fingerprint
return r.text
Si la cible rend les annonces avec JavaScript ou lance des CAPTCHAs persistants, une Scraper API qui porte une véritable empreinte de navigateur et résout la couche anti-bot pour vous est moins fragile que de maintenir votre propre ferme de navigateurs. Notre guide sur comment contourner Cloudflare en 2026 couvre où cette ligne se situe.
Obtenez des proxies résidentiels pour les sites d'annonces automobiles
Dédupliquez par VIN entre les sources
La colonne la plus utile dans les données automobiles est le VIN. Parce que les concessionnaires publient la même voiture sur chaque marché, votre extraction brute est pleine de doublons qui ressemblent à des annonces distinctes. Le VIN est un identifiant unique mondial pour le véhicule physique, donc en se basant dessus, on regroupe ces doublons en un seul enregistrement — et vous permet de comparer comment la même voiture est tarifée sur Cars.com, Autotrader et CarGurus, ou par quel concessionnaire. Gardez le prix le plus bas par VIN, ou conservez-les tous étiquetés par source, selon ce que vous mesurez.
def dedupe_by_vin(rows):
best = {}
for r in rows:
vin = r.get("vin")
if not vin:
continue
price = int(r["price"])
if vin not in best or price < int(best[vin]["price"]):
best[vin] = r # keep the cheapest listing per car
return list(best.values())

Tarification géographique : la même voiture, différent code postal
Les prix automobiles sont locaux. Le même modèle affiche des prix et des stocks différents selon le code postal depuis lequel vous effectuez la recherche, car les concessionnaires et la demande varient selon la région. Pour capturer cet écart, balayez un ensemble de codes postaux et, là où le site personnalise en fonction de la localisation du visiteur, routez chaque requête par une sortie dans la région correspondante. Un pool résidentiel avec ciblage par pays et ville vous permet de voir les prix comme le ferait un acheteur local — essentiel pour l'arbitrage, la comparaison des concessionnaires ou la construction d'un modèle d'évaluation qui n'est pas biaisé vers un seul marché.
zips = ["10001", "90001", "60601", "77001"] # NY, LA, Chicago, Houston
spread = {}
for z in zips:
url = search_url(z, make="toyota", model="camry", year_min=2021)
rows = parse_listings(fetch(url)) # exit geo-matched to the ZIP
spread[z] = [int(r["price"]) for r in rows]
# now compare median price by market
for z, prices in spread.items():
prices.sort()
print(z, "median", prices[len(prices)//2])
C'est le même modèle axé sur la localisation derrière la surveillance des prix des concurrents et la collecte de données immobilières — partout où le prix dépend de l'emplacement de l'acheteur, les sorties géo-ciblées sont non négociables.
Sources d'enchères et de gros
Les sites d'annonces de détail vous disent ce que demandent les concessionnaires ; les plateformes d'enchères comme Copart vous disent pour combien les voitures changent réellement de mains au niveau de gros — l'autre moitié d'un modèle de tarification. Ces sites sont plus lourdement défendus : Copart, par exemple, utilise la protection web Imperva avec empreinte comportementale, et des défis hCaptcha ou reCAPTCHA apparaissent sous des volumes de requêtes plus élevés. La pagination est également plus stricte — 20 véhicules par page avec une limite stricte d'environ 50 pages, donc une seule recherche se limite à environ 1 000 lots. Atteindre un inventaire complet signifie segmenter les requêtes par marque, modèle, gamme d'années, parc d'enchères ou condition, exactement comme avec les sites de détail, et exécuter chaque segment individuellement.
Parce que ces plateformes chargent les résultats et la pagination avec JavaScript et défient le trafic suspect, elles nécessitent des IPs résidentielles et un écart de 2 à 5 secondes entre les requêtes au minimum. Les proxies de centre de données gèrent les extractions petites et occasionnelles ; tout ce qui est soutenu appartient aux sorties résidentielles. Le gain est un véritable signal : l'historique des enchères, le statut de vente et l'état des lots alimentent la prévision de la demande et l'analyse export-import que les prix demandés au détail seuls ne peuvent pas vous donner.
Surveillez, ne vous contentez pas d'extraire une fois
Une extraction ponctuelle vieillit instantanément dans un marché où les annonces se renouvellent quotidiennement. Le modèle durable est une extraction programmée qui prend des instantanés de vos recherches cibles et compare les exécutions consécutives — nouvelles annonces, baisses de prix, et voitures vendues. Clé chaque ligne par VIN pour qu'un changement de prix sur le même véhicule soit sans ambiguïté, horodatez chaque instantané, et vous avez une série chronologique que vous pouvez suivre : à quelle vitesse des modèles spécifiques se déprécient, quels concessionnaires baissent les prix, où l'inventaire s'accumule. Routez ces exécutions programmées via des IPs résidentielles rotatives pour qu'une tâche quotidienne depuis la même adresse ne finisse pas par être bloquée.
Questions fréquemment posées
Pouvez-vous extraire Cars.com et Autotrader ?
Oui — les pages d'annonces affichent des données de véhicules disponibles publiquement. Le défi pratique est la protection anti-bot : Cars.com utilise Cloudflare et d'autres utilisent Imperva avec CAPTCHAs. Les proxies résidentiels, des en-têtes réalistes et un délai de 2 à 5 secondes entre les requêtes maintiennent une extraction en cours. Respectez les conditions d'utilisation de chaque site et évitez de collecter des données personnelles.
Comment éviter d'être bloqué lors de l'extraction des annonces automobiles ?
Faites tourner les IPs résidentielles pour qu'aucune adresse unique ne fasse trop de requêtes, espacez les requêtes avec un délai aléatoire de 2 à 5 secondes, envoyez un User-Agent de navigateur réel, et segmentez les grandes recherches en plus petites au lieu de paginer sur des milliers de résultats. Si les CAPTCHAs persistent, passez à une Scraper API qui gère la couche anti-bot et le rendu JavaScript.
Pourquoi ai-je des voitures en double lors de l'extraction ?
Les concessionnaires publient le même véhicule sur plusieurs marchés, donc une voiture physique apparaît comme plusieurs annonces. Dédupliquez sur le VIN, qui identifie de manière unique le véhicule quel que soit le site. En se basant sur le VIN, les doublons deviennent une comparaison de prix pour la même voiture entre les sources plutôt qu'un nombre gonflé.
Les prix des voitures changent-ils vraiment selon l'emplacement ?
Oui. L'inventaire et les prix varient selon la région, et de nombreux sites personnalisent les résultats en fonction du code postal du chercheur. Pour capturer l'écart réel, recherchez plusieurs codes postaux et routez chaque requête via une sortie dans la région correspondante en utilisant des proxies résidentiels géo-ciblés, afin de voir les prix locaux au lieu d'une vue nationale biaisée.
L'extraction des annonces automobiles revient à atteindre chaque voiture (segmenter au-delà de la limite d'environ 1 000 résultats), contourner la barrière anti-bot (rotation des IPs résidentielles, rythme poli), regrouper les doublons par VIN, et capturer les écarts géographiques avec des sorties ciblées par localisation. Construisez le pipeline autour du prix, du kilométrage, du VIN et du concessionnaire, et vous disposez d'informations sur les prix des concessionnaires sur tous les principaux marchés à la fois.
Commencez à extraire les annonces automobiles avec QuantumProxies