2017-06-14 79 views
2

我需要抓取需要登錄的網站。我正在嘗試創建一個session並登錄,因爲登錄後必須抓取不同的頁面。但無法找出爲什麼它不起作用。python-requests無法登錄到網站

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,因爲即使我使用PhantomJSselenium也會彈出控制檯。

+2

請先嚐試登錄登錄頁面。也許它會設置一些預計會出現在帖子中的cookies。 –

+0

@JohnGordon哇!這樣可行。請發佈它作爲答案。 –

回答

3

嘗試做的登錄頁面上獲得第一。也許它會設置一些預計會出現在帖子中的cookies。

+0

你能幫我多一點嗎?它正在工作,當我從一個正常的腳本這樣做,但是當我試圖登錄和從Django項目的視圖刮擦它不工作。你能說出原因嗎? –

+0

很難說沒有看到您的代碼... –

+0

我們可以移動聊天嗎? –

0

您可能會缺少一些標題。我會攔截網絡瀏覽器發出的請求,以查看您缺少的內容,然後將這些標題添加到您的請求中。

你會發現關於如何做它的官方文檔,這裏的信息:http://docs.python-requests.org/en/master/user/quickstart/#custom-headers

+0

如何添加標題?它不應該沒有標題? :/ –

+0

這真的取決於你打電話的服務器。例如,越來越多的網站現在阻止未包含瀏覽器標題的請求。 在python請求中,你可以添加一個包含你的頭文件的字典作爲你的post請求的參數,kwarg被命名爲'headers'(不帶引號)。 –