Как очистить имена команд и шансы НХЛ от API?

1

Я надеюсь на следующую информацию:

1) Имена команд НХЛ

2) Коэффициенты ставок

Вот сайт: https://www.bovada.lv/services/sports/event/v2/events/A/description/hockey/nhl.

Вот мой код:

import requests

source = requests.get("https://www.bovada.lv/services/sports/event/v2/events/A/description/hockey/nhl").json()   

data = source[0]    

for game in data['events'][2].items():
    print(game)

Приведенный выше код только печатает данные для одной игры. Я надеялся на все игры. Есть ли простой способ пройти через все из них? Я также не уверен, как разбирать информацию, которую я ищу.

  • Имена команд

Я заметил, что имена команд находятся в разделе "конкуренты":

competitors":[{"id":"3596982-510","name":"Philadelphia Flyers","home":true},{"id":"3596982-376","name":"New York Rangers","home":false}]

В приведенном выше примере информация, которую я ищу, - это Филадельфия Флайерс и Нью-Йорк Рейнджерс, соответственно.

  • шансы

(Примечание: коэффициенты изменяются, поэтому числа, которые вы видите, могут быть разными)

Я также заметил, что спрэд с коэффициентом находится в разделе "группы отображения":

"displayGroups":[{"id":"100-128","description":"Game Lines","defaultType":true,"alternateType":false,"markets":[{"id":"57349611","description":"Total","key":"2W-OU","marketTypeId":"120743","status":"O","singleOnly":false,"notes":"","period":{"id":"1191","description":"Match","abbreviation":"M","live":false,"main":true},"outcomes":[{"id":"294606239","description":"Over","status":"O","type":"O","price":{"id":"1836755921","handicap":"6.5","american":"EVEN","decimal":"2.00","fractional":"1/1","malay":"1.00","indonesian":"1.00","hongkong":"1.00"}},{"id":"294606240","description":"Under","status":"O","type":"U","price":{"id":"1836755922","handicap":"6.5","american":"-125","decimal":"1.800","fractional":"4/5","malay":"0.80","indonesian":"-1.25","hongkong":"0.80"}}]},{"id":"57349614","description":"Moneyline","key":"2W-12","marketTypeId":"372","status":"O","singleOnly":false,"notes":"","period":{"id":"1191","description":"Match","abbreviation":"M","live":false,"main":true},"outcomes":[{"id":"294606235","description":"New York Rangers","status":"O","type":"A","competitorId":"3596982-376","price":{"id":"1836569815","american":"+125","decimal":"2.250","fractional":"5/4","malay":"-0.80","indonesian":"1.25","hongkong":"1.25"}},{"id":"294606236","description":"Philadelphia Flyers","status":"O","type":"H","competitorId":"3596982-510","price":{"id":"1836569814","american":"-155","decimal":"1.645161","fractional":"20/31","malay":"0.65","indonesian":"-1.55","hongkong":"0.65"}}]},{"id":"57349618","description":"Puck Line","key":"2W-HCAP","marketTypeId":"120744","status":"O","singleOnly":false,"notes":"","period":{"id":"1191","description":"Match","abbreviation":"M","live":false,"main":true},"outcomes":[{"id":"294606248","description":"New York Rangers","status":"O","type":"A","competitorId":"3596982-376","price":{"id":"1836755920","handicap":"1.5","american":"-210","decimal":"1.47619","fractional":"10/21","malay":"0.48","indonesian":"-2.10","hongkong":"0.48"}},{"id":"294606249","description":"Philadelphia Flyers","status":"O","type":"H","competitorId":"3596982-510","price":{"id":"1836569799","handicap":"-1.5","american":"+175"

В приведенном выше примере информация, которую я ищу, - 1,5 и -210 (для New York Rangers) и -1.5 и +175 (для Филадельфийских листовок).

Вот пример данных, которые я хотел бы использовать для одной игры:

                            Spread       Win         Total
New York Rangers        +1.5 (-230)     +130     O 6.0 (-105)
Philadelphia Flyers     -1.5 (+190)     -150     O 6.0 (-115)

Я хотел бы получить такую же информацию для всех игр, если это возможно.

Я новичок в соскабливании и не имею никакого предварительного кодирования опыта. Любая помощь будет оценена. Заранее благодарим за ваше время и усилия!

  • Обновить:

Вот URL: https://www.bovada.lv/sports/hockey

Я ищу информацию о ставках:

Изображение 174551

Теги:
web-scraping
parsing

2 ответа

2
Лучший ответ

Чтобы получить пар имен команд, выполните следующие действия:

import requests

source = requests.get("https://www.bovada.lv/services/sports/event/v2/events/A/description/hockey/nhl").json()   

data = source[0] 
for game in data:
    for team in data['events']:
        try:
            team_1 = team['competitors'][0]['name']
            team_2 = team['competitors'][1]['name']
            try: odd_1_1 = team['displayGroups'][0]['markets'][0]['outcomes'][0]['price']['handicap'] 
            except KeyError: odd_1_1 = None
            try: odd_1_2 = team['displayGroups'][0]['markets'][0]['outcomes'][0]['price']['american'] 
            except KeyError: odd_1_2 = None
            try: odd_2_1 = team['displayGroups'][0]['markets'][0]['outcomes'][1]['price']['handicap'] 
            except KeyError: odd_2_1 = None
            try: odd_2_2 = team['displayGroups'][0]['markets'][0]['outcomes'][1]['price']['american'] 
            except KeyError: odd_2_2 = None
            print("{0} ({2}, {3}) vs {1} ({4}, {5})".format(team_1,team_2, odd_1_1, odd_1_2, odd_2_1, odd_2_2))
        except IndexError:
            pass

Выход:

Philadelphia Flyers (6.0, -115) vs New York Rangers (6.0, -105)
Washington Capitals (1.5, -150) vs Detroit Red Wings (-1.5, +125)
Anaheim Ducks (5.5, -110) vs Edmonton Oilers (5.5, -110)
...

Обратите внимание, что в некоторых записях ключ- competitors не имеет значения, поэтому я использовал try/except для обработки этого случая...

  • 1
    На данный момент я не могу найти необходимые +1.5 -210 и -1.5 +175 под displayGroups ... но я постараюсь найти :)
  • 0
    @Able Archer Можете ли вы сказать мне, где именно вы нашли эти значения? :) до сих пор не могу их найти. Или они, вероятно, были обновлены ...
Показать ещё 4 комментария
1

Это данные в формате JSON, поэтому используйте модуль python json

import json
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
>>> ['foo', {'bar': ['baz', None, 1.0, 2]}]

Вы можете использовать отладчик для наблюдения за структурой данных, функция loads(str) вернется. В вашем случае это будет dict. Затем перейдите в списки и словари.

  • 0
    Спасибо за ваш ответ @handras! Я потрачу некоторое время, пытаясь извлечь уроки из этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню