Python请求POST(和Cookie)登录并在获取刮取后失败

Python请求POST(和Cookie)登录并在获取刮取后失败,python,python-requests,http-post,session-cookies,http-get,Python,Python Requests,Http Post,Session Cookies,Http Get,我正试图从网站“”中获取赛马的数据结果(根据betfair起始价格的赔率),但似乎我的日志记录不好(我的帖子请求不好) 有什么建议/建议吗 我的代码: import requests url_get='https://www.timeform.com/horse-racing/result/brighton/2018-06-11/0200/6/1/phoenix-arts-club-fillies-handicap' url_post_pgin='https://www.timeform.co

我正试图从网站“”中获取赛马的数据结果(根据betfair起始价格的赔率),但似乎我的日志记录不好(我的帖子请求不好)

有什么建议/建议吗

我的代码:

import requests

url_get='https://www.timeform.com/horse-racing/result/brighton/2018-06-11/0200/6/1/phoenix-arts-club-fillies-handicap'
url_post_pgin='https://www.timeform.com/horse-racing/account/handlelogin?returnUrl=%2Fhorse-racing%2F'
payload = {"EmailAddress":"mymail@gmail.com","Password":"XXXXXXXXX","RememberMe":"true"}

headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'en-US,en;q=0.5',
'Connection':'keep-alive',
'Content-Length':'195',
'Content-Type':'application/x-www-form-urlencoded',
'DNT':1,
'Host':'www.timeform.com',
'Referer':'https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F',
'Upgrade-Insecure-Requests':1,
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0'}

s = requests.session()
login = s.post(url=url_post_pgin,headers=headers, data=payload) #this should log me in, but I am afraid is not doing good job
get_data=s.get(url=url_get,headers=headers, cookies=s.cookies)

#file = open("rr.html", "w")
#file.write(str(m.text))
#file.close()

*编辑:我更改了url名称变量。

仔细查看网站和您的代码,问题似乎是由于您的标题、发送请求的方式以及未发送的post请求造成的

问题1:标题 我们可以看到你的头球相当大。尽管一个大的头并不等于一个坏的头,但在您的情况下,您在头中发送了大量无用的项目,这可能会混淆服务器,因此我尝试用以下头替换您的头:

 headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-Type':'application/x-www-form-urlencoded',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0'}
如你所见,我已经从中删除了不少内容

问题2:发送请求的错误方式(在您的情况下):
requests.session()
的全部目标是跟踪所有cookie,并防止您手动将它们注入到每个请求中。因此,您应该改变这一点:

get_data=s.get(url=url_get,headers=headers, cookies=s.cookies)
为此:

get_data=s.get(url=url_get,headers=headers)
(每次使用
请求时,Cookie将自动插入。发送请求时,会话

问题3:由于您忘记发送post请求,所以在出现问题之前,您没有按照说明发送请求。我不会详细说明这一点,但您缺少的请求是:
总而言之,在所有这些更改之后,您的代码应该如下所示:

import requests

url_get='https://www.timeform.com/horse-racing/result/brighton/2018-06-11/0200/6/1/phoenix-arts-club-fillies-handicap'
url_post_pgin='https://www.timeform.com/horse-racing/account/handlelogin?returnUrl=%2Fhorse-racing%2F'
url_post_pgin2='https://www.timeform.com/horse-racing/account/sign-in'
payload = {"EmailAddress":"mymail@gmail.com","Password":"XXXXXXXXX","RememberMe":"true"}

headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-Type':'application/x-www-form-urlencoded',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0'}

s = requests.session()

login = s.post(url=url_post_pgin,headers=headers, data=payload) #this should log me in, but I am afraid is not doing good job
s.get(url=url_post_pgin2,headers=headers) #this should log me in, but I am afraid is not doing good job
get_data=s.get(url=url_get,headers=headers)

希望这能有所帮助。

仔细查看网站和您的代码,问题似乎是由于您的标题、您发送一个请求的方式以及您未发送的post请求造成的

问题1:标题 我们可以看到你的头球相当大。尽管一个大的头并不等于一个坏的头,但在您的情况下,您在头中发送了大量无用的项目,这可能会混淆服务器,因此我尝试用以下头替换您的头:

 headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-Type':'application/x-www-form-urlencoded',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0'}
如你所见,我已经从中删除了不少内容

问题2:发送请求的错误方式(在您的情况下):
requests.session()
的全部目标是跟踪所有cookie,并防止您手动将它们注入到每个请求中。因此,您应该改变这一点:

get_data=s.get(url=url_get,headers=headers, cookies=s.cookies)
为此:

get_data=s.get(url=url_get,headers=headers)
(每次使用
请求时,Cookie将自动插入。发送请求时,会话

问题3:由于您忘记发送post请求,所以在出现问题之前,您没有按照说明发送请求。我不会详细说明这一点,但您缺少的请求是:
总而言之,在所有这些更改之后,您的代码应该如下所示:

import requests

url_get='https://www.timeform.com/horse-racing/result/brighton/2018-06-11/0200/6/1/phoenix-arts-club-fillies-handicap'
url_post_pgin='https://www.timeform.com/horse-racing/account/handlelogin?returnUrl=%2Fhorse-racing%2F'
url_post_pgin2='https://www.timeform.com/horse-racing/account/sign-in'
payload = {"EmailAddress":"mymail@gmail.com","Password":"XXXXXXXXX","RememberMe":"true"}

headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-Type':'application/x-www-form-urlencoded',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0'}

s = requests.session()

login = s.post(url=url_post_pgin,headers=headers, data=payload) #this should log me in, but I am afraid is not doing good job
s.get(url=url_post_pgin2,headers=headers) #this should log me in, but I am afraid is not doing good job
get_data=s.get(url=url_get,headers=headers)

希望这有帮助。

我试着运行脚本,结果显示
get_data
在无休止的循环中运行,你是否也有同样的问题?尝试删除标题,它会给出200 OK响应,但会加载“未记录”html代码。多谢,我刚刚发布了我的答案:)我试图运行脚本,但它似乎是在一个无休止的循环中运行的
get_data
,你有相同的问题吗?尝试删除标题,它会给出200个OK响应,但会加载“non-logged”html代码哦,好的,谢谢,我刚刚发布了我的答案:)我的朋友,仍然获取_数据。文本就像日志(未登录)没有通过。你成功了吗?顺便说一句TNX!再次尝试运行代码(我只是做了一次编辑),我在网站上没有帐户,所以我无法真正检查:)太好了,谢谢你现在可以从评论中删除它们。给我一点时间,我会尝试解决这个问题。上帝保佑你福佐罗:)我会尽我所能,我的朋友,仍然会得到数据。文本就像登录(未登录)没有通过。你成功了吗?顺便说一句TNX!再次尝试运行代码(我只是做了一次编辑),我在网站上没有帐户,所以我无法真正检查:)太好了,谢谢你现在可以从评论中删除它们。给我一点时间,我会尽力解决这个问题。上帝保佑你福佐罗苏:)我会尽力的