Come estrarre le quote dai bookmaker per modelli e ricerca di arbitraggio
Le quote si muovono al secondo, e i dati puliti non sono nell'HTML - si trovano nel JSON interno che il front end del bookmaker chiama. Ecco come interrogarlo, normalizzarlo tra i vari bookmaker e rimanere non bloccati mentre lo si fa.
Le quote dei bookmaker sono i dati pubblici che si muovono più velocemente che la maggior parte delle persone tenti mai di estrarre - le linee cambiano al secondo e un numero obsoleto è un numero sbagliato. La buona notizia per chi costruisce modelli o ricerca arbitraggio: quasi mai è necessario analizzare l'HTML del tabellone. Ogni front end di bookmaker moderno è alimentato da un API JSON interno, ed è lì che si trovano le quote pulite e strutturate. Questa guida copre come estrarre le quote dei bookmaker da questi API, interrogarli abbastanza velocemente da essere utili, normalizzarli tra i vari bookmaker e rimanere non bloccati mentre lo si fa.
Trova l'API interna delle quote
Apri la pagina dell'evento di un bookmaker con gli strumenti di sviluppo del tuo browser sulla scheda Network, filtra per XHR/Fetch e osserva le richieste. Vedrai endpoint JSON che restituiscono eventi, mercati e prezzi - gli stessi dati che la pagina rende, ma strutturati. Gli scraper della comunità che coprono più di dieci bookmaker nordamericani e australiani (DraftKings, BetMGM, Caesars, BetRivers, PointsBet e altri) funzionano tutti in questo modo: chiamano l'API interna non documentata piuttosto che analizzare l'HTML, perché il JSON è stabile e completo. Leggilo una volta, e una richiesta ti dà ogni mercato per un evento.
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

Interroga velocemente, ma non stupidamente
Per l'addestramento dei modelli, uno snapshot ogni minuto è sufficiente; uno scraper pubblico MLB che interroga le moneyline ogni 60 secondi su una finestra di quattro ore è un riferimento sensato. Per la ricerca di arbitraggio dal vivo vorrai intervalli più stretti, ma un'interrogazione più stretta da un singolo IP è esattamente la firma che i bookmaker cercano. La risposta è distribuire il carico: ruota l'IP di uscita ogni ciclo in modo che nessun singolo indirizzo stia martellando l'endpoint. Normalizza tutto a quote decimali e una riga per selezione in modo che i bookmaker siano direttamente comparabili:
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 gateway residenziale rotante rende questo un one-liner: punta ogni richiesta a un endpoint e ti fornisce automaticamente un nuovo IP, quindi un'interrogazione minuto per minuto non sembra provenire da una sola macchina. Quando un flusso necessita dello stesso IP per un breve periodo - ad esempio, un mercato vincolato alla sessione - passa a una sessione sticky. La nostra guida a sessioni sticky vs rotanti copre quando ciascuna è adatta.
Ottieni IP residenziali rotanti per i dati delle quote
Anche la licenza geografica è un problema di dati
Le scommesse sportive sono autorizzate giurisdizione per giurisdizione, quindi le quote che un bookmaker mostra - e se ti serve affatto - dipendono da dove proviene la richiesta. Una linea DraftKings nel New Jersey può differire dallo stesso mercato in un altro stato, e alcuni bookmaker bloccano completamente per area geografica. Non è solo un dettaglio di conformità; cambia i dati. Se stai facendo benchmarking o arbitraggio tra regioni, fissa l'uscita del proxy al mercato che stai studiando in modo che le quote siano quelle che un vero scommettitore lì vedrebbe. QuantumProxies copre oltre 200 paesi e stati USA, quindi puoi ottenere linee accurate per regione senza un rack di macchine locali. Vedi la nostra guida allo scraping basato sulla posizione per lo stesso principio geografico applicato alle tariffe.
Memorizza le quote in modo che i movimenti delle linee siano interrogabili
I dati delle quote sono utili solo se puoi porre domande sulla loro storia, quindi memorizzali come serie temporali dal primo giorno. Aggiungi ogni snapshot piuttosto che sovrascrivere - una riga per bookmaker, mercato, selezione e timestamp - in modo da poter ricostruire esattamente cosa ogni bookmaker ha offerto in qualsiasi momento. Quella forma solo aggiuntiva è ciò che ti permette di calcolare il movimento delle linee (come un prezzo è cambiato prima del calcio d'inizio), rilevare i movimenti di vapore (molti bookmaker che si spostano insieme) e testare a ritroso un modello contro le quote che erano effettivamente disponibili, non quelle di oggi. Sovrascrivi solo il prezzo più recente e butti via il segnale più prezioso dell'intero dataset.
Due note pratiche. Primo, timestamp alla cattura, non all'analisi, e registra la posizione di uscita insieme a ogni riga - le quote sono specifiche per regione, quindi "DraftKings, NJ, 14:32:05" è un dato diverso dallo stesso bookmaker in un altro stato. Secondo, deduplica sulla chiave naturale (bookmaker + mercato + selezione + timestamp) in modo che una richiesta ripetuta dopo un timeout non conti due volte un prezzo. Con quella struttura, confrontare i bookmaker per margini di mercato incrociati diventa una semplice query invece di una corsa, e la tua ricerca di arbitraggio o modellazione si basa su una storia pulita e verificabile. È la stessa disciplina di monitoraggio che la nostra guida a monitoraggio delle scorte e della disponibilità applica all'inventario - solo qui i valori si muovono al secondo.
Muri anti-bot e quando ricorrere a un API
Non tutti i bookmaker sono ugualmente facili. Alcuni si trovano dietro una forte rilevazione dei bot e bloccheranno rapidamente uno scraper ingenuo; altri sono semplicemente lenti, costringendo a una richiesta per gruppo di mercato. Quando un obiettivo rende le quote solo dopo un pesante JavaScript, o ti combatte con il fingerprinting, una richiesta grezza non è più sufficiente. Un Scraper API che trasporta un vero fingerprint del browser, ruota gli IP e rende JS su richiesta è solitamente meno lavoro che mantenere quello stack da soli - e restituisce il payload analizzato. Una nota sul lato legale: estrarre quote pubbliche per analisi è comune, ma i Termini dei bookmaker spesso limitano l'accesso automatizzato e l'attività è regolamentata - questa è una guida, non un consiglio legale o di scommessa, quindi verifica la tua giurisdizione.

Domande frequenti
Come faccio a estrarre le quote delle scommesse con Python?
Guarda la scheda Network del bookmaker per trovare l'API JSON interna che il suo front end chiama, quindi richiedi quell'endpoint direttamente tramite un proxy e analizza la risposta strutturata. Normalizza tutto a quote decimali con una riga per selezione in modo che i bookmaker siano comparabili. Questo è molto più stabile che analizzare l'HTML del tabellone reso, che cambia costantemente.
Ogni quanto dovrei interrogare per le quote?
Per l'addestramento dei modelli, ogni 30-60 secondi è di solito sufficiente; un riferimento comune è uno snapshot delle moneyline ogni minuto. La ricerca di arbitraggio richiede intervalli più stretti, ma un'interrogazione veloce da un IP viene segnalata - ruota l'IP di uscita ogni ciclo attraverso un pool residenziale in modo che il carico si distribuisca su molti indirizzi invece di uno.
Perché le quote differiscono quando le estraggo da un'altra posizione?
I bookmaker sono autorizzati per giurisdizione, quindi le linee e la disponibilità variano per stato o paese, e alcuni bookmaker bloccano completamente per area geografica. La posizione di uscita della richiesta decide quale mercato vedi. Per raccogliere quote accurate per regione, fissa l'uscita del tuo proxy alla giurisdizione che stai studiando piuttosto che presumere che esista un prezzo globale.
È legale estrarre le quote dei bookmaker?
Raccogliere quote visualizzate pubblicamente per analisi è ampiamente praticato, ma i Termini di Servizio dei bookmaker spesso proibiscono l'accesso automatizzato, e le scommesse sportive sono fortemente regolamentate per regione. Tratta i dati come input di ricerca pubblica, rispetta i Termini di ogni sito e le direttive dei robot, e verifica le regole dove operi. Questa è una guida generale, non un consiglio legale o di scommessa.
Estrarre bene le quote si riduce a quattro mosse: leggi il JSON interno, interroga con una cadenza costante, ruota gli IP residenziali in modo che nessun indirizzo si distingua, e abbina la geolocalizzazione di uscita al mercato. Se fai tutto correttamente, avrai un feed di quote pulito e accurato per regione - la materia prima per qualsiasi ricerca di modelli o di caccia ai margini.