我希望从以下位置抓取历史数据:
https://www.racenet.com.au/results/horse-racing
通过转到“选择日期”选项卡并选择日期并单击“查看结果”按钮来获取历史记录。
您会注意到,以这种方式与日历交互不会更改 URL,因此我不知道如何循环浏览日历并调出特定日期的时间表,然后如何访问结果,即,当我手动从日历中选择日期,然后在返回的页面上“查看源代码”时,我看不到与特定比赛等效的链接。
示例:从日历中随机选择2021年5月11日 麦凯(昆士兰州)是第一个列出的赛道。 右键单击此页面并搜索“Mackay”没有找到匹配项。 手动单击第一场比赛“R1”,会看到 URL 更改为: https://www.racenet.com.au/results/horse-racing/mackay-20210511/smartstate-rentals-bm65-race-1 这对我来说没什么问题,我的问题是循环浏览日历日期并处理这些比赛 URL 所涉及的步骤。
我希望 python 中有一个解决方案,任何有关如何解决这个问题的提示/建议将不胜感激。
这会将特定日期的所有数据转储到 JSON 文件中。修改
DATE
的定义以选择其他日期。或者将整个事情放入一个函数中,以便您可以轻松地迭代多个日期。
API 调用返回的数据可以通过
response.json()
作为字典进行访问。您可以操纵它来提取相关数据。
我喜欢先将其转储到缩进的 JSON 文件中,这样我就可以理解其结构,这会告诉我如何访问所需的数据。
import requests
import json
DATE = "2024-06-07"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:126.0) Gecko/20100101 Firefox/126.0",
"Accept": "*/*",
"authorization": "Bearer none",
}
params = {
"operationName": "meetingsIndexByStartEndDate",
"variables": '{"startDate": "' + DATE + '", "endDate": "' + DATE + '", "limit": 100}',
"extensions": '{"persistedQuery": {"version": 1, "sha256Hash": "998212fede87c9261e0f18e9d8ced2ed04a915453dcd64ae1b5cf5a72cf25950"}}',
}
response = requests.get("https://puntapi.com/graphql-horse-racing", params=params, headers=headers)
with open(f"race-data-{DATE}.json", "wt") as file:
file.write(json.dumps(response.json(), indent=2))