使用Python Requests:会话、Cookies和POST

50

我正在尝试使用 StubHub API 爬取一些销售数据。这里是一个示例数据:

https://sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata

你会注意到,如果你没有登录stubhub.com,访问该网址将不起作用。 你需要先登录

一旦我通过浏览器登录,我在新标签页中打开要爬取的URL,然后使用以下命令来检索已爬取的数据:

r = requests.get('https://sell.stubhub.com/sellapi/event/4236070/section/null/seatmapdata')

然而,一旦浏览器会话在十分钟后过期,我就会收到这个错误:

<FormErrors>
<FormField>User Auth Check</FormField>
<ErrorMessage>
Either is not active or the session might have expired. Please login again.
</ErrorMessage>

我认为我需要通过cookie来实现会话ID以保持我的身份验证的有效性。

对于从未做过这种事情的人来说,Requests库的文档非常糟糕,所以我希望你们能够帮助我。

Requests提供的示例是:

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")

print r.text
# '{"cookies": {"sessioncookie": "123456789"}}'

老实说,我对那个一点也不懂。如何在POST请求之间保留Cookie?


如果您有法律义务需要删除内容,请标记以引起管理人员的注意,并清楚地解释情况,我们将采取适当的行动。请不要仅仅编辑您的问题主体。 - animuson
这就是我了解StubHub.com的方式。 - Ciasto piekarz
请参考以下链接:https://stackoverflow.com/questions/38122379/performing-login-with-python-requests-cookies-not-activated - Frank
1个回答

89

我不知道stubhub的api如何工作,但通常它应该是这样的:

s = requests.Session()
data = {"login":"my_login", "password":"my_password"}
url = "http://example.net/login"
r = s.post(url, data=data)

现在您的会话包含登录表单提供的 cookie。要访问此会话的 cookie,只需使用

s.cookies
任何类似再次请求的操作都将使用此Cookie。

你能帮我吗?我尝试以这种方式登录网站,但它不起作用。 - MD. Khairul Basar
虽然我已经得到了答案,但我在这里链接我的问题,因为它可能会帮助其他人。 - MD. Khairul Basar
进一步的POST请求似乎无法工作。之后只有GET请求可以工作吗? - Satys
只要你从会话对象执行请求,任何东西都应该正常工作。如果您有特定的问题,请发新问题并链接它,我会尽力帮助。 - Michał
1
@kcorlidy,如果您知道可接受的重定向次数,您可以设置一个特定的限制,例如:s.max_redirects = 3,其中s是一个会话对象。 - Michał
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接