Вы в значительной степени там.Вы нажали на его конечную точку и преобразовали источник в объект python (или коллекцию объектов python), что и делает .json()
.
Так что теперь вы ищете систематический способ доступа к даннымчто вы хотите, но вы не уверены в структуре данных ... так что самый простой способ обратиться к нему, это посмотреть на него.
Python имеет встроенную функциональность, чтобы помочь вам выяснить, какие объекты,Ваш лучший друг это функция type()
.Давайте посмотрим, что такое source
:
>>> type(source)
<class 'list'>
Хорошо, поэтому источник - это список, поэтому мы можем проверить его длину:
>>> len(source)
1
ОК, так что этосписок только с одним элементом внутри.Что в этом списке?
>>> type(source[0])
<class 'dict'>
ОК, поэтому source
- это list
с одним dict
внутри.Что dict
должно быть там, где находятся все данные, давайте выделим их:
>>> data = source[0]
Python dict
имеет несколько удобных функций, которые также позволяют проводить проверку.Для начала мы можем взглянуть на то, что keys
из data
:
>>> data.keys()
dict_keys(['path', 'events'])
Итак, всего 2 клавиши, одна называется path
, а другая - events
.Поскольку вы ищете информацию о ставках для каждой игры, давайте посмотрим на клавишу events
, сначала мы посмотрим, что это такое:
>>> type(data['events'])
<class 'list'>
>>> len(data['events'])
13
ОК, предположительно список матчей НФЛ,к какому типу относится содержимое этого списка:
>>> set(type(e) for e in data['events'])
{<class 'dict'>}
Итак, все они dicts
, имеют ли они одинаковую структуру?
>>> all(data['events'][0].keys() == e.keys() for e in data['events'][1:])
True
Да, все одинаковой структуры.Какова структура?
>>> data['events'][0].keys()
dict_keys(['id', 'description', 'type', 'link', 'status', 'sport', 'startTime', 'live', 'awayTeamFirst', 'denySameGame', 'teaserAllowed', 'competitionId', 'notes', 'numMarkets', 'lastModified', 'competitors', 'displayGroups'])
Опять же, вы должны знать, что все на самом деле, прежде чем вы сможете рассуждать об этом:
>>> for k, v in data['events'][0].items():
... print(k, type(v))
...
id <class 'str'>
description <class 'str'>
type <class 'str'>
link <class 'str'>
status <class 'str'>
sport <class 'str'>
startTime <class 'int'>
live <class 'bool'>
awayTeamFirst <class 'bool'>
denySameGame <class 'bool'>
teaserAllowed <class 'bool'>
competitionId <class 'str'>
notes <class 'str'>
numMarkets <class 'int'>
lastModified <class 'int'>
competitors <class 'list'>
displayGroups <class 'list'>
Из этих ключей только два хранят коллекции какзначения competitors
и displayGroups
.Таким образом, любые рыночные данные должны содержаться в любом из них.
Я не собираюсь делать всю работу за вас, но я надеюсь, что вы поняли картину.Когда вы работаете с внешними источниками данных, которые не имеют никакой документации, систематически осматривайте объект, чтобы знать, с чем вы имеете дело.