Skip to main content
 首页 » 编程设计

python之如何抓取ajax返回的网页内容

2025年05月04日36zhujiabin

这是我要抓取的页面: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获取结果的数据呢?谢谢。

请您参考如下方法:

本网站使用 GraphQL https://graphql.rmdprod.racing.com 上的 API。需要通过 header 发送 API key 并检索 here .

的示例, & :

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 '.' 

使用 与 :

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())