为什么该API返回意外内容?

时间:2019-08-21 04:10:06

标签: python rest curl python-requests

我要做什么

我正在尝试从这个名为whoscored的网站复制一个API调用

API调用:当我按下小三角按钮(标记为橙色)转到另一个日期时,我想返回列表(在下面的屏幕快照中标记为绿色)。我真正想要的是match_ids-这些响应列表中的第一个数字(959734、959847等)。

enter image description here

我的问题:但是,当我在Python或cURL上尝试此操作时,我在Python和cURL中始终收到404页HTML或空白列表。

代码:我为cURL编写的代码是我从copy as curl获得的代码。然后,我使用this site将cURL转换为Python请求。

import requests

headers = {
    'sec-fetch-mode': 'cors',
    'cookie': 'visid_incap_774904=3kEvtXT6Tj6Xzoe/RUIgJu72zlwAAAAAQUIPAAAAAAC3g3aCi3Pnbw4WzyEOL6+j; incap_ses_438_774904=Eh88UGT+mSfTIkNTBBkUBr9mW10AAAAATaHYUuDom6e9m7mfUm13Sw==; _cmpQcif3pcsupported=1; googlepersonalization=OlkgPGOlkgPGgA; eupubconsent=BOlkgPGOlkgPGAKAYAENAAAA6AAAAA',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'en-US,en;q=0.9',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
    'accept': 'text/plain, */*; q=0.01',
    'referer': 'https://whoscored.com/Regions/252/Tournaments/2/Seasons/5826/England-Premier-League',
    'model-last-mode': 'gYCkNzrx6WdIiTy4IlIqU5+yR+YgSH7OmhZfJbHMexA=',
    'authority': 'http://whoscored.com',
    'x-requested-with': 'XMLHttpRequest',
    'sec-fetch-site': 'same-origin',
}

params = (
    ('d', '2016W19'),
    ('isAggregate', 'false'),
)

response = requests.get('https://whoscored.com/tournamentsfeed/12496/Fixtures/', headers=headers, params=params)

#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.get('https://whoscored.com/tournamentsfeed/12496/Fixtures/?d=2016W19&isAggregate=false', headers=headers)

print(response.text)

其他问题:我已经与最初获得所需列表的另一个人进行了讨论。但是经过几次尝试,甚至他也开始找回HTML内容。

我认为这是一个封装事件。服务器可能知道请求是由脚本生成的,因此阻止了我们。

是否可以解决此问题?我听说过使用TOR更改每个请求的IP地址,但我一点都不熟悉(我也不知道那是否可行)。

0 个答案:

没有答案