Comment extraire les cotes des bookmakers pour les modèles et la recherche d'arbitrage
Les cotes évoluent à la seconde, et les données propres ne se trouvent pas dans le HTML - elles sont dans le JSON interne appelé par le front-end du bookmaker. Voici comment les interroger, les normaliser entre les bookmakers, et rester débloqué pendant le processus.
Les cotes des bookmakers sont les données publiques les plus dynamiques que la plupart des gens essaient de récupérer - les lignes changent à la seconde, et un chiffre obsolète est un chiffre erroné. La bonne nouvelle pour ceux qui construisent des modèles ou recherchent l'arbitrage : vous n'avez presque jamais besoin d'analyser le HTML du tableau de bord. Chaque front-end de bookmaker moderne est alimenté par une API JSON interne, et c'est là que se trouvent les cotes propres et structurées. Ce guide explique comment extraire les cotes des bookmakers à partir de ces API, les interroger suffisamment rapidement pour être utiles, les normaliser entre les bookmakers, et rester débloqué pendant le processus.
Trouver l'API interne des cotes
Ouvrez la page d'événement d'un bookmaker avec les outils de développement de votre navigateur sur l'onglet Réseau, filtrez sur XHR/Fetch, et observez les requêtes. Vous verrez des endpoints JSON renvoyant des événements, des marchés et des prix - les mêmes données que la page rend, mais structurées. Les scrapers communautaires qui couvrent plus de dix bookmakers nord-américains et australiens (DraftKings, BetMGM, Caesars, BetRivers, PointsBet, et d'autres) fonctionnent tous de cette manière : ils appellent l'API interne non documentée plutôt que d'analyser le HTML, car le JSON est stable et complet. Lisez-le une fois, et une requête vous donne tous les marchés pour un événement.
import requests
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
# endpoint + params come from watching the site's own network calls
API = "https://sportsbook.example.com/api/v2/events/{event_id}/markets"
def get_markets(event_id):
r = requests.get(API.format(event_id=event_id), proxies=proxies,
timeout=15, headers={"User-Agent": "Mozilla/5.0"})
return r.json() # events -> markets -> selections with prices

Interroger rapidement, mais intelligemment
Pour l'entraînement des modèles, une capture toutes les minutes suffit largement ; un scraper public MLB qui interroge les moneylines toutes les 60 secondes sur une fenêtre de quatre heures est une cadence de référence raisonnable. Pour la recherche d'arbitrage en direct, vous voudrez des intervalles plus serrés, mais une interrogation trop rapide depuis une seule IP est exactement la signature que les bookmakers surveillent. La solution est de répartir la charge : faites tourner l'IP de sortie à chaque cycle pour qu'aucune adresse unique ne martèle le point de terminaison. Normalisez tout en cotes décimales et une ligne par sélection pour que les bookmakers soient directement comparables :
import time
def american_to_decimal(a):
return round(1 + (a/100 if a > 0 else 100/abs(a)), 4)
def snapshot(event_id):
rows = []
for m in get_markets(event_id)["markets"]:
for sel in m["selections"]:
rows.append({
"ts": time.time(),
"market": m["name"],
"runner": sel["name"],
"decimal": american_to_decimal(sel["priceAmerican"]),
})
return rows
# poll on a steady interval; a rotating gateway gives a fresh IP each loop
while True:
save(snapshot("mlb-12345"))
time.sleep(60)
Un passerelle résidentielle rotative rend cela simple : pointez chaque requête vers un point de terminaison et il vous attribue automatiquement une nouvelle IP, de sorte qu'une interrogation minute par minute ne ressemble jamais à une seule machine. Lorsqu'un flux nécessite la même IP pour une courte rafale - par exemple, un marché lié à une session - passez à une session persistante. Notre guide sur les sessions persistantes vs rotatives explique quand chacune est appropriée.
Obtenez des IP résidentielles rotatives pour les données de cotes
Les licences géographiques sont aussi un problème de données
Les paris sportifs sont licenciés juridiction par juridiction, donc les cotes qu'un bookmaker affiche - et s'il vous sert ou non - dépendent de l'origine de la requête. Une ligne DraftKings dans le New Jersey peut différer du même marché dans un autre état, et certains bookmakers bloquent complètement par géolocalisation. Ce n'est pas seulement un détail de conformité ; cela change les données. Si vous comparez ou faites de l'arbitrage entre régions, fixez la sortie proxy sur le marché que vous étudiez pour que les cotes soient celles qu'un vrai parieur verrait là-bas. QuantumProxies couvre plus de 200 pays et états américains, vous permettant de récupérer des lignes précises par région sans un ensemble de machines locales. Consultez notre guide de l'extraction basée sur la localisation pour le même principe géographique appliqué aux tarifs.
Stockez les cotes pour que les mouvements de ligne soient interrogeables
Les données de cotes ne sont utiles que si vous pouvez poser des questions sur leur historique, alors stockez-les sous forme de séries temporelles dès le premier jour. Ajoutez chaque capture au lieu de la remplacer - une ligne par bookmaker, marché, sélection et horodatage - pour pouvoir reconstituer exactement ce que chaque bookmaker offrait à tout moment. Cette structure en ajout uniquement est ce qui vous permet de calculer le mouvement des lignes (comment un prix a dérivé avant le coup d'envoi), de détecter les mouvements de vapeur (plusieurs bookmakers changeant ensemble), et de tester un modèle par rapport aux cotes qui étaient réellement disponibles, pas celles d'aujourd'hui. Remplacer uniquement le dernier prix et vous jetez le signal le plus précieux de l'ensemble du jeu de données.
Deux notes pratiques. Premièrement, horodatez à la capture, pas à l'analyse, et enregistrez l'emplacement de sortie avec chaque ligne - les cotes sont spécifiques à la région, donc "DraftKings, NJ, 14:32:05" est un point de données différent du même bookmaker dans un autre état. Deuxièmement, dédupliquez sur la clé naturelle (bookmaker + marché + sélection + horodatage) pour qu'une requête réessayée après un timeout ne compte pas doublement un prix. Avec cette structure, comparer les bookmakers pour des avantages inter-marchés devient une simple requête au lieu d'une course, et votre recherche d'arbitrage ou de modélisation s'exécute sur un historique propre et vérifiable. C'est la même discipline de surveillance que notre guide sur la surveillance des stocks et de la disponibilité applique à l'inventaire - sauf qu'ici les valeurs bougent à la seconde.
Murs anti-bot et quand recourir à une API
Tous les bookmakers ne sont pas également faciles. Certains se cachent derrière une forte détection de bots et bloqueront rapidement un scraper naïf ; d'autres sont simplement lents, forçant une requête par groupe de marché. Lorsqu'une cible rend les cotes uniquement après un lourd JavaScript, ou vous combat avec du fingerprinting, une requête brute ne suffit plus. Une Scraper API qui porte une empreinte réelle de navigateur, fait tourner les IP et rend le JS à la demande est généralement moins de travail que de maintenir cette pile vous-même - et elle renvoie la charge utile analysée. Une ligne sur le côté légal : extraire des cotes publiques pour l'analyse est courant, mais les conditions des bookmakers interdisent souvent l'accès automatisé et l'activité est réglementée - ceci est un guide, pas un conseil de pari ou juridique, vérifiez donc votre juridiction.

Questions fréquemment posées
Comment extraire les cotes de paris avec Python ?
Observez l'onglet Réseau du bookmaker pour trouver l'API JSON interne que son front-end appelle, puis demandez ce point de terminaison directement via un proxy et analysez la réponse structurée. Normalisez tout en cotes décimales avec une ligne par sélection pour que les bookmakers soient comparables. C'est bien plus stable que d'analyser le HTML du tableau de bord rendu, qui change constamment.
À quelle fréquence devrais-je interroger les cotes ?
Pour l'entraînement des modèles, toutes les 30 à 60 secondes suffisent généralement ; une référence courante est une capture de moneyline chaque minute. La recherche d'arbitrage nécessite des intervalles plus serrés, mais une interrogation rapide depuis une seule IP est signalée - faites tourner l'IP de sortie à chaque cycle via un pool résidentiel pour que la charge se répartisse sur plusieurs adresses au lieu d'une seule.
Pourquoi les cotes diffèrent-elles lorsque je les extrais d'un autre endroit ?
Les bookmakers sont licenciés par juridiction, donc les lignes et la disponibilité varient selon l'état ou le pays, et certains bookmakers bloquent complètement par géolocalisation. L'emplacement de sortie de la requête décide du marché que vous voyez. Pour collecter des cotes précises par région, fixez votre sortie proxy à la juridiction que vous étudiez plutôt que de supposer qu'un prix global existe.
Est-il légal d'extraire les cotes des bookmakers ?
Collecter des cotes affichées publiquement pour l'analyse est largement pratiqué, mais les conditions de service des bookmakers interdisent souvent l'accès automatisé, et les paris sportifs sont fortement réglementés par région. Traitez les données comme une entrée de recherche publique, respectez les conditions et les directives des robots de chaque site, et vérifiez les règles là où vous opérez. Ceci est une orientation générale, pas un conseil juridique ou de pari.
Bien extraire les cotes revient à quatre actions : lire le JSON interne, interroger à une cadence régulière, faire tourner les IP résidentielles pour qu'aucune adresse ne se démarque, et adapter la géo de sortie au marché. Faites cela correctement et vous aurez un flux de cotes propre et précis par région - la matière première pour tout modèle ou recherche d'avantages.