Python 登錄網站詳解及實例
對于大部分論壇,我們想要抓取其中的帖子分析,首先需要登錄,否則無法查看。
這是因為 HTTP 協議是一個無狀態(Stateless)的協議,服務器如何知道當前請求連接的用戶是否已經登錄了呢?有兩種方式:
Python 提供了相當豐富的模塊,所以對于這種網絡操作只要幾句話就可以完成。我以登錄 QZZN 論壇為例,事實上下面的程序幾乎所有的 PHPWind 類型的論壇都是適用的。
# -*- coding: GB2312 -*-from urllib import urlencodeimport cookielib, urllib2# cookiecj = cookielib.LWPCookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))urllib2.install_opener(opener)# Loginuser_data = {'pwuser': '你的用戶名', 'pwpwd': '你的密碼', 'step':'2' }url_data = urlencode(user_data)login_r = opener.open("http://bbs.qzzn.com/login.php", url_data)一些注釋:
最后一個問題是,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。更詳細的請看手冊...
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選