如何使用Python的Requests模块“login”到一个网站?
我试图发布一个请求,使用Python中的请求模块login到一个网站,但它并没有真正的工作。 我是新来的…所以我不知道我是否应该做我的用户名和密码cookies或某种types的HTTP授权的事情,我发现(??)。
from pyquery import PyQuery import requests url = 'http://www.locationary.com/home/index2.jsp'
所以现在,我想我应该使用“后”和cookies….
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'} r = requests.post(url, cookies=ck) content = r.text q = PyQuery(content) title = q("title").text() print title
我有一种感觉,我正在做cookies事情错了…我不知道。
如果没有正确login,主页的标题应该出现在“Locationary.com”,如果是,则应该是“主页”。
如果你可以向我解释一些关于请求和cookie的东西,并帮我解决这个问题,我将不胜感激。 :d
谢谢。
…它还没有真正的工作。 好的…所以这就是你login之前HTML页面所说的内容:
</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td> <td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td> <td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td> <td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td>
所以我觉得我做对了,但是输出仍然是“Locationary.com”
第二编辑:
我希望能够保持login很长一段时间,每当我请求在该域下的网页,我希望内容显示,如果我login。
如果您想要的信息在您login后立即指向的页面上…
让我们调用你的ck
variablespayload
,就像在python-requests文档中一样:
payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'} url = 'http://www.locationary.com/home/index2.jsp' requests.post(url, data=payload)
除此以外…
我知道你已经find了另一个解决scheme,但是对于像我这样的人来说,find这个问题,寻找同样的东西,可以通过如下的请求来实现:
首先,如Marcus所做的那样,检查login表单的来源以获得三条信息 – 表单发布到的url以及用户名和密码字段的名称属性。 在他的例子中,他们在用户名和inUserPass。
一旦你得到了这个,你可以使用requests.Session()
实例向loginURL发出一个post请求,并将你的login细节作为一个负载。 从会话实例发出请求与正常使用请求基本相同,只是增加持久性,允许您存储和使用cookie等。
假设您的login尝试成功,您可以简单地使用会话实例向网站发出进一步的请求。 标识您的cookie将被用来授权请求。
例
import requests # Fill in your details here to be posted to the login form. payload = { 'inUserName': 'username', 'inUserPass': 'password' } # Use 'with' to ensure the session context is closed after use. with requests.Session() as s: p = s.post('LOGIN_URL', data=payload) # print the html returned or something more intelligent to see if it's a successful login page. print p.text # An authorised request. r = s.get('A protected web page url') print r.text # etc...
让我试着简化一下,假设网站的url是http://example.com/ ,假设你需要填写用户名和密码进行注册,所以我们进入login页面,例如http:// example。 com / login.php,然后查看它的源代码,然后search它将在窗体中的动作URL标签
<form name="loginform" method="post" action="userinfo.php">
现在采取userinfo.php绝对URL将是“ http://example.com/userinfo.php ”,现在运行一个简单的Python脚本
import requests url = 'http://example.com/userinfo.php' values = {'username': 'user', 'password': 'pass'} r = requests.post(url, data=values) print r.content
我希望这有助于别人某个地方的某个人。
找出用户名<...name=username.../>
和密码<...name=password../>
在网站表单上使用的input名称,并将其replace为以下脚本。 同时replaceURL指向所需的站点login。
login.py
#!/usr/bin/env python import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) payload = { 'username': 'user@email.com', 'password': 'blahblahsecretpassw0rd' } url = 'https://website.com/login.html' requests.post(url, data=payload, verify=False)
使用disable_warnings(InsecureRequestWarning)
会在尝试login到具有未经validation的SSL证书的站点时,使脚本中的任何输出disable_warnings(InsecureRequestWarning)
。
额外:
要在基于UNIX的系统的命令行上运行这个脚本,将它放在一个目录(例如home/scripts
,并将此目录添加到~/.bash_profile
或terminal使用的类似文件的path中。
# Custom scripts export CUSTOM_SCRIPTS=home/scripts export PATH=$CUSTOM_SCRIPTS:$PATH
然后在home/scripts/login.py
创build一个到这个python scipt的链接
ln -s ~/home/scipts/login.py ~/home/scipts/login
closures你的terminal,开始一个新的,运行login