我一直在尝试访问没有API的网站。我想从网站上检索我当前的“队列”。但如果我没有登录,它将不允许我访问该网站的这一部分。这是我的代码:
login_data = {
'action': 'https://www.crunchyroll.com/?a=formhandler',
'name': 'my_username',
'password': 'my_password'
}
import requests
with requests.Session() as s:
s.post('https://www.crunchyroll.com/login', data=login_data)
ck = s.cookies
r = s.get('https://www.crunchyroll.com/home/queue')
print r.text
现在,我得到一个页面:
<html lang="en">
<head>
<title>Redirecting...</title>
<meta http-equiv="refresh" content="0;url=http://www.crunchyroll.com/home/queue" />
</head>
<body>
<script type="text/javascript">
document.location.href="http:\/\/www.crunchyroll.com\/home\/queue";
</script>
</body>
</html>
我认为它应该有用,但我只是在重定向页面...我怎么想过去呢?
谢谢!
答案 0 :(得分:1)
重定向正在发生,因为您没有正确登录网站 - 您有POST请求的错误表单URL,并且您没有POST该站点所期望的所有表单数据。
您可以通过查看https://www.crunchyroll.com/login
的源代码来确定登录所需的内容。重要的部分是<form>
代码和<input>
代码:
<form id="RpcApiUser_Login" method="post" action="https://www.crunchyroll.com/?a=formhandler">
<input type="hidden" name="formname" value="RpcApiUser_Login" />
<input type="text" name="name" value="my_user_name_goes_here" /></td>
<input type="password" name="my_password_goes_here" /></td>
</form>
如果这意味着当您单击“提交”时,会向URL https://www.crunchyroll.com/?a=formhandler
发出POST请求,其中包含formname=RpcApiUser_Login
之类的键/值对数据。要在Python中复制它,您需要将所有这些相同的数据对POST到该URL。
要了解有关此类CGI编程的更多信息,请look here。
尝试使用此Python代码,它可以工作:
import requests
login_data = {
'name': 'my_username',
'password': 'my_password'
'formname': 'RpcApiUser_Login'
}
with requests.Session() as s:
s.post('https://www.crunchyroll.com/?a=formhandler', data=login_data)
r = s.get('http://www.crunchyroll.com/home/queue')
print r.text