python-requests无法登录网站

时间:2017-06-14 15:06:31

标签: python request python-requests

我需要抓取需要登录的网站。我正在尝试创建一个session并登录,因为我必须在登录后刮掉不同的页面。但是无法找出它无法正常工作的原因。

import requests
from bs4 import BeautifulSoup

login_data = {
           "log":"login",
           "login":"my email",
           "password":"my password"
}

session = requests.session()
session.post(login_url, data=login_data)
response = session.get(url)
html = response.text
soup = BeautifulSoup(html, "html.parser")
print(soup.title.get_text())

标题显示它无效。

这是网站表单。

<form method="post" id="signin-form" class="form-horizontal">
<input type="hidden" name="referer" value=""  />
<div class="form-group">
<label for="email_text" class="col-sm-4 control-label">Your login (email):</label>
<div class="col-sm-8">
<input type="email" class="form-control" id="email_text" value="" name="login" autofocus
data-validation='{"parent":".form-group","events":["keyup","blur"],"rules":[{"name":"notblank"},{"name":"email"}]}' />
</div>
</div>
<div class="form-group">
<label for="password_text" class="col-sm-4 control-label">Password:</label>
<div class="col-sm-8">
<input type="password" class="form-control" id="password_text" name="password"
data-validation='{"parent":".form-group","rules":[{"name":"min","min":5}]}' />
</div>
</div>
<div class="form-group">
<div class="col-sm-8 col-sm-offset-4">
<div class="checkbox">
<label>
<input type="checkbox" name="rememberme"> Remember me on this computer
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<button type="submit" class="btn btn-default btn-lg" name="log">Log into your account</button>
<a class="btn btn-default btn-lg mobile-show-inline-block" href="/account/create/">Create account</a>
<a href="/account/lostpassword" class="btn btn-link btn-lg">Forgot your password?</a>
</div>
</div>
</form>

N.B:不建议我使用selenium。我可以使用selenium执行此操作并对其进行测试,但我必须坚持使用requests,因为selenium会弹出控制台,即使我使用PhantomJS

3 个答案:

答案 0 :(得分:3)

首先尝试登录页面。也许它设置了一些预计会出现在帖子中的cookie。

答案 1 :(得分:1)

我知道这个问题是很久以前提出的,但是无论如何,我会为仍然对此有困难的人提出解决方案: 我建议检查您要发布的表单是否接受某种隐藏的输入,问题示例就是这样做的。这非常频繁,并且有时如果我们不注意它,则有时会阻止我们登录到该站点。 因此,假设该网站中存在这样的形式:

<form method='post' id='signin-form' class='big-form'>
 <input type="hidden" id="whatever" name="foo" value="check">
 <input type="text" id="u" name="user">
 <input type="password" id="pwd" name="pass">
</form>

在这种情况下,变量login_data应该像这样:

login_data = {
       "foo":"check",
       "user":"your username",
       "pass":"your password",           
}

已执行此操作,并且如果网站未检查标题,则通过请求模块登录到网站应该没有问题。

答案 2 :(得分:0)

您可能遗漏了一些标题。我会拦截网络浏览器发出的请求,以查看您丢失的内容,然后将这些标题添加到您的请求中。

您可以在官方文档中找到有关如何执行此操作的信息,请点击此处:http://docs.python-requests.org/en/master/user/quickstart/#custom-headers