尝试使用请求来获取Javscript加载的内容,而不会生成实际的浏览器来呈现它。我正在使用请求lib来获取表格,但我一直在用我的测试代码获得504,而我不是100%的原因。
所以我正在寻找赛马数据:sports.betway.com /#/ horse-racing / uk-and-ireland / haydock
我观看了网络流量并找到了流量来源。它是一个带有eventIds号码的/ emoapi / emos的调用。
我试过了:
import requests
url = 'https://sports.betway.com/emoapi/emos'
params = {
'eventIds': '807789',
'lang': 'en'
}
headers = {'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive',
'Content-Length': '271',
'Content-Type': 'application/json',
'Host': 'sports.betway.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'}
#Note: I do also set the origin and ref link in the header but I can't post that many links in a question.
response = requests.post(url, params=params, headers=headers)
print response
fixtures = response.json()
print fixtures
我无法看到我在请求中遗漏了什么。但打印响应以“
”的形式返回这是浏览器标题上的完整有效负载的示例,它请求一大堆ID而不仅仅是我尝试的那个:
{"eventIds":[807789,808612,808597,807790,808613,808598,807791,808611,808599,807792,808614,808600,807793,808615,808601,807794,808616,808602,807795,808617,807781,808591,807782,808589,807783,808590,807785,808592,807784,808593,807786,808594,807788,808595,807787],"lang":"en"}
它是该网址的POST,因此我不确定为什么会超时。
任何人都可以了解我在这里出错的地方吗?这是一件非常明显的事吗?
答案 0 :(得分:0)
有效负载应包含在请求正文中而不是url参数中。 在这种情况下,有效负载是一个json原始字符串。
import requests
url = 'https://sports.betway.com/emoapi/emos'
data = '{"eventIds": [807789]}'
response = requests.post(url, data=data )
print response.text