如何刮擦NFL赌注线?

时间:2018-11-15 23:08:59

标签: python json web-scraping get python-requests

我想使用Python从https://www.bovada.lv/sports/football/nfl抓取所有NFL投注行/信息。

在SO社区的帮助下,我找到了NFL游戏的API:https://www.bovada.lv/services/sports/event/v2/events/A/description/football/nfl

您可以在我的pastebin上查看有关代码的更多信息: https://pastebin.com/tmAenaBD

到目前为止,这是我的代码:

#Just a heads up...The code loads slow since it is printing the entire source

import requests 

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

print(source)

我可以在代码中看到数据,但是,我不知道如何解析它。有什么建议吗?

我要寻找的投注行信息包括所有游戏的以下内容(本周共13场比赛):

1)游戏日期

2)游戏时间

3)团队(每场比赛两支球队)

4)点差(赔率)

5)获胜又名“钱线”(赔率)

6)总数又名“大/小”(赔率)

这是第一款游戏的照片:

enter image description here

如果可能,我希望所有游戏。

我是新手,没有任何编码经验。感谢您能提供的任何帮助,对于您的时间和精力,我深表感谢。

1 个答案:

答案 0 :(得分:2)

您几乎在那里。您已经到达端点,并将源转换为python对象(或python对象的集合),.json()就是这样做的。

因此,现在您正在寻找一种访问所需数据的系统方法,但是您不确定数据的结构...因此,解决该问题的最简单方法就是查看它。

Python具有内置功能,可帮助您找出什么对象。您最好的朋友是函数type()。让我们看看source是什么:

>>> type(source)
<class 'list'>

好的,所以source是一个列表,因此我们可以测试它的长度:

>>> len(source)
1

好的,所以它是一个列表,里面只有一个元素。列表中包含什么?

>>> type(source[0])
<class 'dict'>

好的,所以source是一个list,里面有一个dictdict必须位于所有数据所在的位置,请隔离它:

>>> data = source[0]

Python dict具有一些方便的功能,这些功能也可以进行检查。首先,我们可以看看keys的{​​{1}}是什么:

data

因此只有2个键,一个称为>>> data.keys() dict_keys(['path', 'events']) ,另一个称为path。在寻找每个游戏的投注信息时,让我们看一下events键,首先我们将看到它的含义:

events

好的,大概是NFL比赛的清单,该清单的内容是什么类型:

>>> 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。因此,任何市场数据都必须包含在其中任何一个中。

我不会为您做全部工作,但我希望您能理解。当您使用没有任何文档的外部数据源时,请系统地检查对象,以了解您要处理的内容。