使用Python和请求登录

时间:2014-08-14 13:12:46

标签: python login python-requests

我一直在尝试访问没有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>

我认为它应该有用,但我只是在重定向页面...我怎么想过去呢?

谢谢!

1 个答案:

答案 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