尝试从PrizePicks中抓取预测

问题描述 投票:0回答:2

我目前正在尝试通过从PrizePicks 中抓取投影来简化我的投影模型过程。 我一直遇到一个错误,提示语法无效。 任何帮助将不胜感激。 这是我的代码

import requests
import pandas as pd
pp_props_url = 'https://api.prizepicks.com/projections?league_id=7&per_page=250&single_stat=true'
headers = {
'Connection': 'keep-alive',
'Accept': 'application/json; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
'Access-Control-Allow-Credentials': 'true',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Referer': 'https://app.prizepicks.com/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9'

}

response = requests.get(url=pp_props_url, headers=headers).json()
player_prop = response
player_prop
columns_list = [
"League",
"League_Id",
"Market",
"Name",
"Position",
"Team",
"Team_Name"
"Stat_Type"
"Line_Score",
"Points",
"Rebounds",
"Assists",
"Pts+Rebs+Asts",
"3-Pt Made"

]

pp_df = pd.DataFrame(player_prop, columns = columns_list)
pp_df.to_csv('player_props_20221030.csv', index=False)

当我打开 csv 时,唯一打印的是列标题。 这次网络抓取交易是全新的,所以我真的很感激任何帮助。

python json web-scraping request
2个回答
0
投票

你的问题让我很烦恼。首先,我在检索 .json 文件时收到提示错误。从标题中删除

'Accept-Encoding': 'gzip, deflate, br' 
后,这些问题得到了解决。之后确实会返回一个有效的 .json 文件,但也许您已经是这种情况了。

然后在检索这个 .json 文件后,我可以看到您的许多

columns_list
标头并不在实际的 .json 文件中。以League为例,在.json文件中定义为league。首都很重要。

此外,.json 文件会在

included
部分下呈现所有感兴趣的玩家,因此您可以这样检索它们:
player_prop["included"]
。然后,对于每个玩家,您都对属性部分感兴趣,因此我们需要这样过滤它们:
[i["attributes"] for i in player_prop["included"]]

现在您可以创建 pd.DataFrame,您将看到为每个玩家创建了一行。我只更改了几个列标题,并且您放置的一些列标题似乎不在 .json 文件中,因此最好检查一下(例如 3-PT Made 似乎是名称值),但它按预期返回数据:

>>> pd.DataFrame([i["attributes"] for i in player_prop["included"]], columns=columns_list)
   league  league_id       market                name  ... rebounds assists  pts+rebs+asts  3-pt made
0     NBA        7.0      Houston         Jalen Green  ...      NaN     NaN            NaN        NaN
1     NBA        7.0      Phoenix          Chris Paul  ...      NaN     NaN            NaN        NaN
2     NBA        7.0      Phoenix     Cameron Johnson  ...      NaN     NaN            NaN        NaN
3     NaN        NaN          NaN       Blocked Shots  ...      NaN     NaN            NaN        NaN
4     NaN        NaN          NaN                 NBA  ...      NaN     NaN            NaN        NaN
5     NaN        NaN          NaN       Fantasy Score  ...      NaN     NaN            NaN        NaN
6     NBA        7.0      Houston    Kevin Porter Jr.  ...      NaN     NaN            NaN        NaN
7     NBA        7.0      Phoenix       Mikal Bridges  ...      NaN     NaN            NaN        NaN
8     NaN        NaN          NaN         Single Stat  ...      NaN     NaN            NaN        NaN
9     NaN        NaN          NaN           3-PT Made  ...      NaN     NaN            NaN        NaN
10    NaN        NaN          NaN             Assists  ...      NaN     NaN            NaN        NaN
11    NaN        NaN          NaN              Points  ...      NaN     NaN            NaN        NaN
12    NBA        7.0       Denver        Nikola Jokic  ...      NaN     NaN            NaN        NaN
13    NBA        7.0       Denver        Jamal Murray  ...      NaN     NaN            NaN        NaN
14    NBA        7.0  Los Angeles    Lonnie Walker IV  ...      NaN     NaN            NaN        NaN
15    NBA        7.0  Los Angeles    Patrick Beverley  ...      NaN     NaN            NaN        NaN
16    NaN        NaN          NaN              Steals  ...      NaN     NaN            NaN        NaN
17    NaN        NaN          NaN       Pts+Rebs+Asts  ...      NaN     NaN            NaN        NaN
18    NaN        NaN          NaN            Pts+Asts  ...      NaN     NaN            NaN        NaN
19    NaN        NaN          NaN       Fantasy Score  ...      NaN     NaN            NaN        NaN
20    NBA        7.0      Houston      Alperen Sengun  ...      NaN     NaN            NaN        NaN
21    NaN        NaN          NaN           Blks+Stls  ...      NaN     NaN            NaN        NaN
22    NBA        7.0  Los Angeles      LeBron James\t  ...      NaN     NaN            NaN        NaN
23    NBA        7.0       Denver  Michael Porter Jr.  ...      NaN     NaN            NaN        NaN
24    NaN        NaN          NaN           Turnovers  ...      NaN     NaN            NaN        NaN
25    NaN        NaN          NaN            Pts+Rebs  ...      NaN     NaN            NaN        NaN
26    NaN        NaN          NaN           Rebs+Asts  ...      NaN     NaN            NaN        NaN
27    NBA        7.0      Phoenix        Devin Booker  ...      NaN     NaN            NaN        NaN
28    NaN        NaN          NaN            Rebounds  ...      NaN     NaN            NaN        NaN
29    NBA        7.0       Denver        Aaron Gordon  ...      NaN     NaN            NaN        NaN
30    NBA        7.0  Los Angeles       Anthony Davis  ...      NaN     NaN            NaN        NaN

[31 rows x 12 columns]

现在以类似的方式写入.csv 应该会成功。


0
投票

这对于新手来说是很棘手的。不确定你真正想要什么数据,但你需要提取 json 中的嵌套数据。 Pandas 可以使用 json_normalize 来做到这一点

import requests
import pandas as pd
pp_props_url = 'https://api.prizepicks.com/projections?league_id=7&per_page=250&single_stat=true'
headers = {
'Connection': 'keep-alive',
'Accept': 'application/json; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
'Access-Control-Allow-Credentials': 'true',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Referer': 'https://app.prizepicks.com/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9'}

response = requests.get(url=pp_props_url, headers=headers).json()
df = pd.json_normalize(response,
                       record_path =['data'])

df.to_csv('player_props_20221030.csv')

输出:

print(df)
           type  ... relationships.stat_type.data.id
0    projection  ...                              14
1    projection  ...                             106
2    projection  ...                              22
3    projection  ...                              19
4    projection  ...                             245
..          ...  ...                             ...
269  projection  ...                              23
270  projection  ...                              24
271  projection  ...                              21
272  projection  ...                              23
273  projection  ...                              23

[274 rows x 26 columns]
© www.soinside.com 2019 - 2024. All rights reserved.