首页 > 解决方案 > 每次发送 Ajax 响应时都会更改值

问题描述

我正在尝试制作一个网络爬虫来从博彩公司获得投注赔率。他们的网站完全由 AJAX 请求组成,我没有这方面的经验或 JS 能够弄清楚正在发生的事情以及我可以做些什么来获得我想要的结果。

到目前为止,我的代码使用 Selenium 打开一个页面并检索发送 API 请求所需的 cookie,并将其与标头和 cookie 一起传递,然后递归地发送对其中包含的页面的请求;

headers = {
'Host': 'www.bet365.com',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
              'Chrome/78.0.3904.97 Safari/537.36',
'DNT': '1',
'Accept': '*/*',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Referer': 'https://www.bet365.com/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
}
r = requests.get(api, headers=headers, cookies=c)
for link in getLinks(r.text):
    print(requests.get('https://www.bet365.com/SportsBook.API/web? 
    lid=1&zid=1&'+link+'&cid=197&cgid=0', headers=headers, cookies=c).text)

我已经到了模拟 AJAX 调用并向返回的 API 发送请求的地步: https://www.bet365.com/SportsBook.API/web?lid=1&zid=1&pd=%23AC%23B1% 23C1%23D8%23E83884115%23F3%23G0%23H0%23I1%23P%5E13%23Q%5E43316955&cid=197&cgid=2

这将提供页面: https ://www.bet365.com/#/AC/B1/C1/D8/E83884115/F3/G0/H0/I1/P^13/Q^43316955

我可以在此响应中看到我想要的数据(OD= 值),但是我真正感兴趣的值会在刷新为循环上看起来不同的编码响应后每隔几秒更改一次。这些值确实具有与页面上的赔率相关的值,因为具有相同赔率的市场在 API 响应中具有相同的编码值。这方面的例子是:

PA;ID=394840198;IT=83884115-394840198;NA=Galatasaray;OD=F^D;NF=83884115;

在第一个请求上,然后:

PA;ID=394840198;IT=83884115-394840198;NA=Galatasaray;OD=C[A;NF=83884115;

刷新后。如上面的 bet365 链接所示,这两个值都意味着 2.4 的赔率。

我的问题是,有什么方法可以控制通过请求标头或其他东西向我提供哪个编码值,因为有一个我真正想要并且可以轻松使用但似乎服务器正在发送一个随机编码时间。

标签: javascriptpythonajaxweb-crawler

解决方案


推荐阅读