首頁 >後端開發 >Python教學 >實例詳解Python 登入網站的方法

實例詳解Python 登入網站的方法

Y2J
Y2J原創
2017-04-25 09:55:182177瀏覽

這篇文章主要介紹了Python 登入網站詳解及實例的相關資料,需要的朋友可以參考下

Python 登入網站詳解及實例

##對於大部分論壇,我們想要抓取其中的帖子分析,首先需要登錄,否則無法查看。

  這是因為 HTTP 協定是一個無狀態(Stateless)的協議,伺服器如何知道目前請求連線的使用者是否已經登入了呢?有兩種方式:

  1. 在URI 中明確地使用Session ID;

  2. 利用Cookie,大概過程是登入一個網站後會在本地保留一個Cookie,當繼續瀏覽這個網站的時候,瀏覽器會把Cookie 連同地址請求一起發送過去。


  Python 提供了相當豐富的模組,所以對於這個網路操作只要幾句話就可以完成。我以登入 QZZN 論壇為例,事實上下面的程式幾乎所有的 PHPWind 類型的論壇都是適用的。

# -*- coding: GB2312 -*-
from urllib import urlencode
import cookielib, urllib2

# cookie
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

# Login
user_data = {'pwuser': '你的用户名',
       'pwpwd': '你的密码',
       'step':'2'
      }
url_data = urlencode(user_data)
login_r = opener.open("http://bbs.qzzn.com/login.php", url_data)

 一些註解:

  • urllib2 顯然是比 urllib 高階一點的模組,裡麵包括如何使用 Cookies。

  • 在 urllib2 中,每個客戶端可以用一個 opener 來抽象,每個 opener 又可以增加多個 handler 來增強其功能。

  • 在建構 opener 時指定了 HTTPCookieProcessor 做為 handler,因此這個 handler 支援 Cookie。

  • 使用 isntall_opener 後,呼叫 urlopen 時會使用這個 opener。

  • 如果不需要儲存 Cookie,cj 這個參數可以省略。

  • user_data 存放的就是登入所需的訊息,在登入論壇的時候把這個訊息傳遞過去就行了。

  • urlencode 功能是把字典 use​​r_data 編碼成"?pwuser=username&pwpwd=password"的形式,這樣做是為了讓程式易讀一些。


  最後一個問題是,pwuser、pwpwd 這類的名字是從哪裡來的,這就要分析需要登入的網頁了。我們知道,一般的登入介面都是表單,節錄如下:

<form action="login.php?" method="post" name="login" onSubmit="this.submit.disabled = true;"> 
<input type="hidden" value="" name="forward" /> 
<input type="hidden" value="http://bbs.qzzn.com/index.php" name="jumpurl" /> 
<input type="hidden" value="2" name="step" /> 
... 
<td width="20%" onclick="document.login.pwuser.focus();"><input type="radio" name="lgt" value="0" checked />用户名 <input type="radio" name="lgt" value="1" />UID</td> 
<td><input class="input" type="text" maxLength="20" name="pwuser" size="40" tabindex="1" /> <a href="reg1ster.php" rel="external nofollow" >马上注册</a></td> 
<td>密 码</td> 
<td><input class="input" type="password" maxLength="20" name="pwpwd" size="40" tabindex="2" /> <a href="sendpwd.php" rel="external nofollow" target="_blank">找回密码</a></td> 
... 
</form>

  從這裡可以看出,我們需要輸入的使用者名稱密碼對應的就是pwuser 和pwpwd,而step 對應的則是登入(這個是嘗試出來的)。

  注意到,這個論壇表單採用的是 post 方式,如果是 get 方式則本文的方法就需要變動一下,不能直接 open,而是應該首先 Request,然後再 open。更詳細的請看手冊...

以上是實例詳解Python 登入網站的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn