Cómo Extraer Cuotas de Casas de Apuestas para Modelos e Investigación de Arbitraje
Las cuotas cambian por segundo, y los datos limpios no están en el HTML, sino en el JSON interno que llama el front end de la casa de apuestas. Aquí te mostramos cómo consultarlo, normalizarlo entre casas y evitar bloqueos mientras lo haces.
Las cuotas de casas de apuestas son los datos públicos de más rápido movimiento que la mayoría de las personas intentan extraer: las líneas cambian por segundo, y un número obsoleto es un número incorrecto. La buena noticia para quienes construyen modelos o investigan arbitraje: casi nunca necesitas analizar el HTML del marcador. Cada front end moderno de casas de apuestas se alimenta de una API interna de JSON, y ahí es donde viven las cuotas limpias y estructuradas. Esta guía cubre cómo extraer cuotas de casas de apuestas de esas APIs, consultarlas lo suficientemente rápido para ser útiles, normalizarlas entre casas y evitar bloqueos mientras lo haces.
Encuentra la API interna de cuotas
Abre la página de eventos de una casa de apuestas con las herramientas de desarrollo de tu navegador en la pestaña de Red, filtra por XHR/Fetch y observa las solicitudes. Verás endpoints JSON que devuelven eventos, mercados y precios, los mismos datos que la página muestra, pero estructurados. Los scrapers comunitarios que cubren más de diez casas de apuestas norteamericanas y australianas (DraftKings, BetMGM, Caesars, BetRivers, PointsBet y otras) funcionan de esta manera: llaman a la API interna no documentada en lugar de analizar HTML, porque el JSON es estable y completo. Léelo una vez, y una solicitud te da todos los mercados para 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

Consulta rápido, pero no de manera estúpida
Para el entrenamiento de modelos, una instantánea cada minuto es suficiente; un scraper público de MLB que consulta líneas de dinero cada 60 segundos durante una ventana de cuatro horas es una cadencia de referencia sensata. Para la investigación de arbitraje en vivo querrás intervalos más ajustados, pero una consulta más ajustada desde una sola IP es exactamente la firma que las casas vigilan. La respuesta es distribuir la carga: rota la IP de salida en cada ciclo para que ninguna dirección individual esté saturando el endpoint. Normaliza todo a cuotas decimales y una fila por selección para que las casas sean directamente 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 gateway residencial rotativo hace esto con una sola línea: apunta cada solicitud a un endpoint y te entrega una nueva IP automáticamente, por lo que una consulta minuto a minuto nunca parece provenir de una sola máquina. Cuando un flujo necesita la misma IP para un corto periodo - digamos, un mercado vinculado a una sesión - cambia a una sesión pegajosa. Nuestra guía sobre sesiones pegajosas vs rotativas cubre cuándo encaja cada una.
Obtén IPs residenciales rotativas para datos de cuotas
La licencia geográfica también es un problema de datos
Las apuestas deportivas están licenciadas por jurisdicción, por lo que las cuotas que muestra una casa - y si te sirve en absoluto - dependen de dónde proviene la solicitud. Una línea de DraftKings en Nueva Jersey puede diferir del mismo mercado en otro estado, y algunas casas bloquean geográficamente por completo. Eso no es solo un detalle de cumplimiento; cambia los datos. Si estás comparando o arbitrando entre regiones, fija la salida del proxy al mercado que estás estudiando para que las cuotas sean las que un apostador real allí vería. QuantumProxies cubre más de 200 países y estados de EE.UU., por lo que puedes obtener líneas precisas por región sin un conjunto de máquinas locales. Consulta nuestra guía de scraping basado en ubicación para el mismo principio geográfico aplicado a tarifas.
Almacena cuotas para que los movimientos de línea sean consultables
Los datos de cuotas solo son útiles si puedes hacer preguntas sobre su historial, así que almacénalos como series temporales desde el primer día. Añade cada instantánea en lugar de sobrescribir - una fila por casa, mercado, selección y marca de tiempo - para que puedas reconstruir exactamente lo que cada casa ofreció en cualquier momento. Esa forma de solo añadir es lo que te permite calcular el movimiento de línea (cómo cambió un precio antes del inicio), detectar movimientos de vapor (muchas casas cambiando juntas) y probar un modelo contra las cuotas que realmente estaban disponibles, no las de hoy. Sobrescribe solo el último precio y estarás desechando la señal más valiosa de todo el conjunto de datos.
Dos notas prácticas. Primero, marca el tiempo en la captura, no en el análisis, y registra la ubicación de salida junto a cada fila - las cuotas son específicas por región, así que "DraftKings, NJ, 14:32:05" es un punto de datos diferente al de la misma casa en otro estado. Segundo, deduplica en la clave natural (casa + mercado + selección + marca de tiempo) para que una solicitud repetida después de un tiempo de espera no cuente doble un precio. Con esa estructura, comparar casas para ventajas entre mercados se convierte en una consulta simple en lugar de una carrera, y tu investigación de arbitraje o modelado se ejecuta contra un historial limpio y auditable. Es la misma disciplina de monitoreo que nuestra guía sobre monitoreo de reposición y disponibilidad aplica al inventario - solo que aquí los valores cambian por segundo.
Muros de bots y cuándo recurrir a una API
No todas las casas son igual de fáciles. Algunas están detrás de una fuerte detección de bots y bloquearán rápidamente un scraper ingenuo; otras son simplemente lentas, forzando una solicitud por agrupación de mercado. Cuando un objetivo renderiza cuotas solo después de un JavaScript pesado, o te lucha con huellas digitales, una solicitud en bruto deja de ser suficiente. Una Scraper API que lleva una huella digital de navegador real, rota IPs y renderiza JS bajo demanda suele ser menos trabajo que mantener esa pila tú mismo - y devuelve la carga útil analizada. Una línea en el lado legal: extraer cuotas públicas para análisis es común, pero los Términos de las casas de apuestas a menudo restringen el acceso automatizado y la actividad está regulada - esto es una guía, no asesoramiento de apuestas o legal, así que verifica tu jurisdicción.

Preguntas frecuentes
¿Cómo extraigo cuotas de apuestas con Python?
Observa la pestaña de Red de la casa de apuestas para encontrar la API interna de JSON que llama su front end, luego solicita ese endpoint directamente a través de un proxy y analiza la respuesta estructurada. Normaliza todo a cuotas decimales con una fila por selección para que las casas sean comparables. Esto es mucho más estable que analizar el HTML del marcador renderizado, que cambia constantemente.
¿Con qué frecuencia debo consultar las cuotas?
Para el entrenamiento de modelos, cada 30-60 segundos suele ser suficiente; una referencia común es una instantánea de línea de dinero cada minuto. La investigación de arbitraje necesita intervalos más ajustados, pero la consulta rápida desde una IP se marca - rota la IP de salida en cada ciclo a través de un pool residencial para que la carga se distribuya entre muchas direcciones en lugar de una sola.
¿Por qué difieren las cuotas cuando extraigo desde otra ubicación?
Las casas de apuestas están licenciadas por jurisdicción, por lo que las líneas y la disponibilidad varían por estado o país, y algunas casas bloquean geográficamente por completo. La ubicación de salida de la solicitud decide qué mercado ves. Para recopilar cuotas precisas por región, fija tu salida de proxy a la jurisdicción que estás estudiando en lugar de asumir que existe un precio global.
¿Es legal extraer cuotas de casas de apuestas?
Recopilar cuotas mostradas públicamente para análisis se hace ampliamente, pero los Términos de Servicio de las casas de apuestas a menudo prohíben el acceso automatizado, y las apuestas deportivas están fuertemente reguladas por región. Trata los datos como una entrada de investigación pública, respeta los Términos de cada sitio y las directivas de robots, y verifica las reglas donde operas. Esto es una guía general, no asesoramiento legal o de apuestas.
Extraer bien las cuotas se reduce a cuatro movimientos: lee el JSON interno, consulta en una cadencia constante, rota IPs residenciales para que ninguna dirección destaque, y coincide la geo de salida con el mercado. Hazlo bien y tendrás un feed de cuotas limpio y preciso por región - la materia prima para cualquier modelo o investigación de búsqueda de ventajas.