Como Extrair Cotações de Casas de Apostas para Modelos e Pesquisa de Arbitragem
As cotações mudam a cada segundo, e os dados limpos não estão no HTML - estão no JSON interno que o front-end da casa de apostas chama. Veja como consultá-lo, normalizá-lo entre diferentes casas e evitar bloqueios enquanto faz isso.
As cotações de casas de apostas são os dados públicos que se movem mais rapidamente que a maioria das pessoas tenta extrair - as linhas mudam a cada segundo, e um número desatualizado é um número errado. A boa notícia para quem está construindo modelos ou pesquisando arbitragem: quase nunca é necessário analisar o HTML do placar. Todo front-end de casa de apostas moderna é alimentado por uma API JSON interna, e é aí que estão as cotações limpas e estruturadas. Este guia cobre como extrair cotações de casas de apostas dessas APIs, consultá-las rápido o suficiente para serem úteis, normalizar entre diferentes casas e evitar bloqueios enquanto faz isso.
Encontre a API interna de cotações
Abra a página de eventos de uma casa de apostas com as ferramentas de desenvolvedor do seu navegador na aba Rede, filtre para XHR/Fetch e observe as requisições. Você verá endpoints JSON retornando eventos, mercados e preços - os mesmos dados que a página renderiza, mas estruturados. Scrapers comunitários que cobrem mais de dez casas norte-americanas e australianas (DraftKings, BetMGM, Caesars, BetRivers, PointsBet e outras) funcionam assim: eles chamam a API interna não documentada em vez de analisar o HTML, porque o JSON é estável e completo. Leia uma vez, e uma requisição te dá todos os mercados para um 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

Consulte rápido, mas não estupidamente
Para treinamento de modelos, um instantâneo a cada minuto é suficiente; um scraper público de MLB que consulta moneylines a cada 60 segundos durante uma janela de quatro horas é uma cadência de referência sensata. Para pesquisa de arbitragem ao vivo, você vai querer intervalos mais apertados, mas consultas mais rápidas de um único IP são exatamente o que as casas observam. A resposta é distribuir a carga: rotacione o IP de saída a cada ciclo para que nenhum endereço único esteja sobrecarregando o endpoint. Normalize tudo para cotações decimais e uma linha por seleção para que as casas sejam diretamente comparáveis:
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)
Um gateway residencial rotativo torna isso uma linha de comando: aponte cada requisição para um endpoint e ele te entrega um novo IP automaticamente, então uma consulta minuto a minuto nunca parece ser de uma única máquina. Quando um fluxo precisa do mesmo IP por um curto período - digamos, um mercado vinculado à sessão - mude para uma sessão fixa. Nosso guia sobre sessões fixas vs rotativas cobre quando cada uma se encaixa.
Obtenha IPs residenciais rotativos para dados de cotações
Licenciamento geográfico também é um problema de dados
As apostas esportivas são licenciadas por jurisdição, então as cotações que uma casa mostra - e se ela te atende ou não - dependem de onde a requisição vem. Uma linha da DraftKings em Nova Jersey pode diferir do mesmo mercado em outro estado, e algumas casas bloqueiam geograficamente completamente. Isso não é apenas um detalhe de conformidade; isso muda os dados. Se você está fazendo benchmarking ou arbitragem entre regiões, fixe a saída do proxy no mercado que está estudando para que as cotações sejam as que um apostador real lá veria. QuantumProxies cobre mais de 200 países e estados dos EUA, então você pode obter linhas precisas por região sem um rack de máquinas locais. Veja nosso guia de extração baseada em localização para o mesmo princípio geográfico aplicado a tarifas.
Armazene cotações para que movimentos de linha sejam consultáveis
Os dados de cotações só são úteis se você puder fazer perguntas sobre seu histórico, então armazene-os como séries temporais desde o primeiro dia. Anexe cada instantâneo em vez de sobrescrever - uma linha por casa, mercado, seleção e timestamp - para que você possa reconstruir exatamente o que cada casa ofereceu em qualquer momento. Essa forma de anexação é o que permite calcular o movimento de linha (como um preço mudou antes do início), detectar movimentos de vapor (muitas casas mudando juntas) e testar um modelo contra as cotações que estavam realmente disponíveis, não as de hoje. Sobrescrever apenas o preço mais recente e você joga fora o sinal mais valioso de todo o conjunto de dados.
Duas notas práticas. Primeiro, timestamp na captura, não na análise, e registre a localização de saída junto com cada linha - as cotações são específicas por região, então "DraftKings, NJ, 14:32:05" é um ponto de dados diferente da mesma casa em outro estado. Segundo, deduplique na chave natural (casa + mercado + seleção + timestamp) para que uma requisição repetida após um timeout não duplique uma cotação. Com essa estrutura, comparar casas para vantagens entre mercados se torna uma consulta simples em vez de uma correria, e sua pesquisa de arbitragem ou modelagem roda contra um histórico limpo e auditável. É a mesma disciplina de monitoramento que nosso guia sobre monitoramento de reabastecimento e disponibilidade aplica ao inventário - só que aqui os valores mudam a cada segundo.
Barreiras de bots e quando recorrer a uma API
Nem toda casa é igualmente fácil. Algumas estão atrás de fortes detecções de bots e bloquearão rapidamente um scraper ingênuo; outras são simplesmente lentas, forçando uma requisição por agrupamento de mercado. Quando um alvo renderiza cotações apenas após um JavaScript pesado, ou luta com você usando fingerprinting, uma requisição bruta deixa de ser suficiente. Uma Scraper API que carrega uma impressão digital de navegador real, rotaciona IPs e renderiza JS sob demanda geralmente dá menos trabalho do que manter essa pilha você mesmo - e ela retorna a carga útil analisada. Uma linha do lado legal: extrair cotações públicas para análises é comum, mas os Termos das casas de apostas muitas vezes restringem o acesso automatizado e a atividade é regulamentada - isso é uma orientação, não um conselho de apostas ou legal, então verifique sua jurisdição.

Perguntas frequentes
Como faço para extrair cotações de apostas com Python?
Observe a aba Rede da casa de apostas para encontrar a API JSON interna que seu front-end chama, então solicite esse endpoint diretamente através de um proxy e analise a resposta estruturada. Normalize tudo para cotações decimais com uma linha por seleção para que as casas sejam comparáveis. Isso é muito mais estável do que analisar o HTML do placar renderizado, que muda constantemente.
Com que frequência devo consultar cotações?
Para treinamento de modelos, a cada 30-60 segundos geralmente é suficiente; uma referência comum é um instantâneo de moneyline a cada minuto. A pesquisa de arbitragem precisa de intervalos mais apertados, mas consultas rápidas de um IP são sinalizadas - rotacione o IP de saída a cada ciclo através de um pool residencial para que a carga se espalhe por muitos endereços em vez de um só.
Por que as cotações diferem quando eu extraio de outro local?
As casas de apostas são licenciadas por jurisdição, então as linhas e a disponibilidade variam por estado ou país, e algumas casas bloqueiam geograficamente completamente. A localização de saída da requisição decide qual mercado você vê. Para coletar cotações precisas por região, fixe sua saída de proxy na jurisdição que está estudando em vez de assumir que existe um preço global.
É legal extrair cotações de casas de apostas?
Coletar cotações exibidas publicamente para análises é amplamente feito, mas os Termos de Serviço das casas de apostas muitas vezes proíbem o acesso automatizado, e as apostas esportivas são fortemente regulamentadas por região. Trate os dados como entrada de pesquisa pública, respeite os Termos de cada site e as diretrizes de robots, e verifique as regras onde você opera. Isso é uma orientação geral, não um conselho legal ou de apostas.
Extrair cotações bem se resume a quatro movimentos: leia o JSON interno, consulte em uma cadência constante, rotacione IPs residenciais para que nenhum endereço se destaque, e combine o geo de saída com o mercado. Acertando isso, você tem um feed de cotações limpo e preciso por região - a matéria-prima para qualquer modelo ou pesquisa de busca de vantagem.