python - 如何抓取ajax返回的网页内容?
问题描述
这是我要抓取的页面: https: //www.racing.com/form/2018-11-06/flemington/race/7/results 比赛结果信息不在源代码中。
我在 Chrome DevTools 中尝试过,但没有找到包含结果的响应数据。
以下是源代码中的一些代码:
ng-controller="formTabResultsController"
ng-init="meet=5149117;race=7;init();" ajax-loader="result"
我认为结果被返回并保存在“结果”结构中,因为有很多这样的:“result.PrizeMoney”“result.Record”。
那么如何使用 Python 获取结果的数据呢?谢谢。
解决方案
该站点在https://graphql.rmdprod.racing.com
. API 密钥需要通过标头发送 &在此处检索。
api_key=$(curl -s "https://www.racing.com/layouts/app.aspx" | \
sed -nE 's/.*headerAPIKey:\s*"(.*)"/\1/p')
curl -s "https://www.racing.com/layouts/app.aspx"
query='query GetMeeting($meetCode: ID!) {
getMeeting(id: $meetCode) {
id
trackName
date
railPosition
races {
id
raceNumber
status
tempo
formRaceEntries {
id
raceEntryNumber
horseName
silkUrl
jockeyName
trainerName
scratched
speedValue
barrierNumber
horse {
name
fullName
colour
}
}
}
}
}'
variables='{ "meetCode": 5149117 }'
curl -G 'https://graphql.rmdprod.racing.com' \
--data-urlencode "query=$query" \
--data-urlencode "variables=$variables" \
-H "X-Api-Key: $api_key" | jq '.'
将python与python-requests一起使用:
import requests
import re
import json
r = requests.get("https://www.racing.com/layouts/app.aspx")
api_key = re.search(".*headerAPIKey:\s*\"(.*)\"", r.text).group(1)
query= """query GetMeeting($meetCode: ID!) {
getMeeting(id: $meetCode) {
id
trackName
date
railPosition
races {
id
raceNumber
status
tempo
formRaceEntries {
id
raceEntryNumber
horseName
silkUrl
jockeyName
trainerName
scratched
speedValue
barrierNumber
horse {
name
fullName
colour
}
}
}
}
}"""
payload = {
"variables": json.dumps({
"meetCode": 5149117
}),
"query": query
}
r = requests.get(
'https://graphql.rmdprod.racing.com',
params = payload,
headers = {
"X-Api-Key": api_key
})
print(r.json())
推荐阅读
- high-availability - 带起搏器的地理集群 - 仲裁与展位
- flutter - 摆脱 Flutter UI 中的双下划线
- c++ - 使用计时器和按钮编码 arduino 交通灯
- flutter - 在颤振中通过蓝牙将字符串值从一个智能手机设备发送到另一台智能手机设备
- html - 删除网页内容下方的空白
- c++ - 在 C++ 类中存储动态数据量
- java - Java 日历未显示正确的 HOUR_OF_DAY
- excel - 将多个 excel 工作簿从一个文件转换为 pdf - 只有未隐藏的工作表
- amazon-web-services - IIS 上的 appConcurrentRequest 限制超出
- powerbi - 如何在 Power BI 中使用年初至今格式格式化文本列