Python API web数据捕获

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

我正在尝试为一个分析项目提取高尔夫统计数据

TL;DR摘要: 我应该使用在网络控制台中找到的API刮取或使用循环吗

我想在今年(2015年至今)收集6或7个统计类别的数据,最好是按照锦标赛来更好地分类球员锦标赛表现。 基本Url为:
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

  • 如何将锦标赛和eon限定符添加为JSON url中的键值对
  • 这是否可行
  • 或者我应该把它刮下来,尝试使用HTML(可能能够捕获stat行标题)

    包含网站中一个表的快照


    我会选择抓取,因为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年美国网球公开赛-

    谢谢。如果我在多个年头和锦标赛页面中循环,我需要旋转页眉吗?你的图片很棒,不需要旋转页眉。谢谢你对这张照片的补充