Python API web数据捕获
我正在尝试为一个分析项目提取高尔夫统计数据 TL;DR摘要: 我应该使用在网络控制台中找到的API刮取或使用循环吗 我想在今年(2015年至今)收集6或7个统计类别的数据,最好是按照锦标赛来更好地分类球员锦标赛表现。 基本Url为:Python API web数据捕获,python,api,web-scraping,Python,Api,Web Scraping,我正在尝试为一个分析项目提取高尔夫统计数据 TL;DR摘要: 我应该使用在网络控制台中找到的API刮取或使用循环吗 我想在今年(2015年至今)收集6或7个统计类别的数据,最好是按照锦标赛来更好地分类球员锦标赛表现。 基本Url为:https://www.pgatour.com/stats 该站点有许多页面,单击特定统计页面后,它有三个下拉字段: 赛季(包含年份)、时段(仅限锦标赛或年初至今)和锦标赛(锦标赛名称) 找到可能的隐藏API: https://statdata-api-prod.pg
https://www.pgatour.com/stats
该站点有许多页面,单击特定统计页面后,它有三个下拉字段:
赛季(包含年份)、时段(仅限锦标赛或年初至今)和锦标赛(锦标赛名称)
找到可能的隐藏API:
https://statdata-api-prod.pgatour.com/api/clientfile/YTDEventStats?T_CODE=r&STAT_ID=02671&YEAR=2021&format=json
但这只包含最近一次锦标赛的数据,而且不是很干净(表数据没有统计类别标题):
我可以通过更改Stat ID=value和年份来调整JSON API。这是一个选项,但我必须弄清楚如何将锦标赛id号和锦标赛统计数据仅作为键值对添加
示例的URL如下所示:https://www.pgatour.com/content/pgatour/stats/stat.02674.y2017.eon.t030.html
eon只进行统计比赛(eoff用于YTD),t030是比赛标志
我是否应该创建循环并更改年份、锦标赛编号和统计编号,然后用JSON获取所有信息,并尝试将其输入df
我会选择抓取,因为url本身可以让你更好地控制自己的目标。此外,您还可以使用pandas轻松获取表格数据 例如:
import requests
import pandas as pd
headers = {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-encoding": "gzip, deflate, br",
"accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.99 Safari/537.36",
"x-requested-with": "XMLHttpRequest",
}
url = "https://www.pgatour.com/content/pgatour/stats/stat.02674.y2017.eon.t030.html"
html = requests.get(url).text
df = pd.read_html(html, flavor="html5lib")
df = pd.concat(df).drop([0, 1, 2], axis=1)
df.to_csv("golf.csv", index=False)
给你这个:
然后,您可以继续交换URL或修改URL的
stat.
、y
和eon
部分以获得不同的统计信息。例如,这是2018年美国网球公开赛-谢谢。如果我在多个年头和锦标赛页面中循环,我需要旋转页眉吗?你的图片很棒,不需要旋转页眉。谢谢你对这张照片的补充