【问题标题】:API web data captureAPI 网络数据捕获
【发布时间】:2021-02-06 14:58:47
【问题描述】:

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

TL;DR 总结: 我应该使用在网络控制台中找到的 API 抓取还是使用循环?

我想提取 6 或 7 个统计类别的数据,按年份(2015 年至今),最好按锦标赛,以更好地对玩家锦标赛表现进行分类。 基本网址为:https://www.pgatour.com/stats

该网站有许多页面,一旦您点击特定的统计页面,它就会有三个下拉字段: 赛季(包含年份)、时间段(仅限锦标赛或 YTD)和锦标赛(锦标赛名称)

找到可能的隐藏 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 中?

  1. 如何将锦标赛和 eon 限定符添加为 JSON url 中的键值对?
  2. 这甚至可行吗?

或者我应该刮掉它并尝试使用 HTML(可能能够捕获统计行标题)?

包含来自网站的一张表的快照

【问题讨论】:

    标签: python api web-scraping


    【解决方案1】:

    我会去抓取,因为网址本身可以让您更好地控制您所追求的内容。此外,您还可以使用 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.yeon 部分以获得不同的统计信息。例如,这是 2018 年美国公开赛 - https://www.pgatour.com/content/pgatour/stats/stat.02674.y2017.eon.t030.html

    【讨论】:

    • 谢谢。如果我要循环浏览多年和锦标赛页面,是否需要轮换标题?
    • 你的照片很棒
    • 无需旋转标题。并感谢您对图片的补充。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多