Python 登錄網(wǎng)站詳解及實例
Python 登錄網(wǎng)站詳解及實例
對于大部分論壇,我們想要抓取其中的帖子分析,首先需要登錄,否則無法查看。
這是因為 HTTP 協(xié)議是一個無狀態(tài)(Stateless)的協(xié)議,服務(wù)器如何知道當(dāng)前請求連接的用戶是否已經(jīng)登錄了呢?有兩種方式:
- 在URI 中顯式地使用 Session ID;
- 利用 Cookie,大概過程是登錄一個網(wǎng)站后會在本地保留一個 Cookie,當(dāng)繼續(xù)瀏覽這個網(wǎng)站的時候,瀏覽器會把 Cookie 連同地址請求一起發(fā)送過去。
Python 提供了相當(dāng)豐富的模塊,所以對于這種網(wǎng)絡(luò)操作只要幾句話就可以完成。我以登錄 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 來增強其功能。
- 在構(gòu)造 opener 時指定了 HTTPCookieProcessor 做為 handler,因此這個 handler 支持 Cookie。
- 使用 isntall_opener 后,調(diào)用 urlopen 時會使用這個 opener。
- 如果不需要保存 Cookie,cj 這個參數(shù)可以省略。
- user_data 存放的就是登錄所需要的信息,在登錄論壇的時候把這個信息傳遞過去就行了。
- urlencode 功能是把字典 user_data 編碼成"?pwuser=username&pwpwd=password"的形式,這樣做是為了使程序易讀一些。
最后一個問題是,pwuser、pwpwd 這類的名字是從哪兒來的,這就要分析需要登錄的網(wǎng)頁了。我們知道,一般的登錄界面都是一個表單,節(jié)選如下:
<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>
從這里可以看出,我們需要輸入的用戶名密碼對應(yīng)的就是 pwuser 和 pwpwd,而 step 對應(yīng)的則是登錄(這個是嘗試出來的)。
注意到,這個論壇表單采用的是 post 方式,如果是 get 方式則本文的方法就需要變動一下,不能直接 open,而是應(yīng)該首先 Request,然后再 open。更詳細(xì)的請看手冊...
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 用python登錄帶弱圖片驗證碼的網(wǎng)站
- python中requests模擬登錄的三種方式(攜帶cookie/session進(jìn)行請求網(wǎng)站)
- python實現(xiàn)網(wǎng)站微信登錄的示例代碼
- python實現(xiàn)網(wǎng)站用戶名密碼自動登錄功能
- 對python抓取需要登錄網(wǎng)站數(shù)據(jù)的方法詳解
- Python實現(xiàn)爬取需要登錄的網(wǎng)站完整示例
- Python3使用requests登錄人人影視網(wǎng)站的方法
- Python爬蟲模擬登錄帶驗證碼網(wǎng)站
- python實現(xiàn)網(wǎng)站的模擬登錄
- 使用Python中的cookielib模擬登錄網(wǎng)站
- python 模擬網(wǎng)站登錄——滑塊驗證碼的識別
相關(guān)文章
Python巧用SnowNLP實現(xiàn)生成srt字幕文件
SnowNLP是一個可以方便的處理中文文本內(nèi)容的python類庫,本文主要為大家詳細(xì)介紹了Python如何巧用SnowNLP實現(xiàn)將一段話一鍵生成srt字幕文件,感興趣的可以了解下2024-01-01Python 搭建Web站點之Web服務(wù)器與Web框架
這篇文章主要介紹了Python 搭建Web站點系列文章的第一篇,主要給大家簡單介紹Web服務(wù)器與Web框架的相關(guān)資料,需要的朋友可以參考下2016-11-11