我目前正试图通过从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时,唯一打印的是列标题。这是这个网络抓取交易的全新版本,所以我真的很感谢任何帮助。
2条答案
按热度按时间p4rjhz4m1#
你的问题对我来说很麻烦。首先,我在检索.json文件时出现提示错误。这些问题在从头文件中删除
'Accept-Encoding': 'gzip, deflate, br'
后得到了解决。在此之后,确实返回了一个有效的.json文件,但也许这已经是你的情况。然后在检索这个.json文件后,我可以看到你的许多
columns_list
头文件并不在实际的.json文件中。以League为例,它在.json文件中被定义为联赛。大写字母很重要。此外,.json文件在
included
部分下呈现了所有感兴趣的球员,因此您可以这样检索他们:player_prop["included"]
。然后,对于每个玩家,您对属性部分感兴趣,因此我们需要过滤它们:[i["attributes"] for i in player_prop["included"]]
。现在你可以创建你的pd.DataFrame了,你会看到为每个播放器创建了一行。我只修改了几个列标题,你放置的一些似乎不在.json文件中,所以检查一下会很好(例如3-PT Made似乎是name的值),但它返回了预期的数据:
现在以类似的方式写入.csv应该是成功的。
7kqas0il2#
对于新手来说,这是一个棘手的问题。不确定你真正想要的是什么数据,但是你需要取出json中的嵌套数据。Pandas可以通过json_normalize来完成
输出: