抓取日历结果

问题描述 投票:0回答:1

我希望从以下位置抓取历史数据:

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 中有一个解决方案,任何有关如何解决这个问题的提示/建议将不胜感激。

python web-scraping dynamic
1个回答
0
投票

这会将特定日期的所有数据转储到 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))

© www.soinside.com 2019 - 2024. All rights reserved.