下面的代碼是來自上面這篇文章,并稍作修改添加了一些注釋。
以上代碼引入了一些python的子產品,然後建立了一個class封裝了login方法。
以上代碼的登入邏輯:
1、進入到登陸頁面,擷取一些關鍵參數,包括随機數rand、password的name和vk。
2、模拟送出登陸,登陸之後跳到微薄頁面。
3、手動跳轉到微薄頁面。
總結:
以上代碼是模拟手機版微網誌的登陸,如果你想模拟登陸網頁版的微網誌,你可以參考下面兩個項目中的代碼:
<a href="https://github.com/chineking/cola/blob/master/contrib/weibo/login.py" target="_blank">cola</a>
<a href="https://github.com/cnpameng/weibomsgbackupgui/blob/master/sina/loginsinacom.py" target="_blank">weibomsgbackupgui</a>
## python urllib子產品
python urllib子產品提供了一個從指定的url位址擷取網頁資料,然後對其進行分析處理,擷取想要的資料。
1、urllib子產品提供的urlopen函數
urllib.urlopen建立一個類檔案對象為指定的url來讀取:
參數url表示遠端資料的路徑,一般是http或者ftp路徑。
參數data表示以get或者post方式送出到url的資料。
參數proxies表示用于代理的設定。
示例:
urlopen傳回一個類檔案對象,它提供了如下方法:
1)read() , readline() , readlines(),fileno()和close(): 這些方法的使用與檔案對象完全一樣。
2)info():傳回一個httplib.httpmessage 對象,表示遠端伺服器傳回的頭資訊。
3)getcode():傳回http狀态碼,如果是http請求,200表示請求成功完成;404表示網址未找到。
4)geturl():傳回請求的url位址。
2.urllibe子產品提供的urlretrieve函數。
urlretrieve方法直接将遠端資料下載下傳到本地。
參數finename指定了儲存本地路徑(如果參數未指定,urllib會生成一個臨時檔案儲存資料。)
參數reporthook是一個回調函數,當連接配接上伺服器、以及相應的資料塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示目前的下載下傳進度。
參數data指post到伺服器的資料,該方法傳回一個包含兩個元素的(filename, headers)元組,filename表示儲存到本地的路徑,header表示伺服器的響應頭。
示例:urlretrieve方法下載下傳檔案執行個體,可以顯示下載下傳進度。
3.輔助方法
urllib中還提供了一些輔助方法,用于對url進行編碼、解碼。
urllib.quote(string[, safe]):對字元串進行編碼。參數safe指定了不需要編碼的字元;
urllib.unquote(string) :對字元串進行解碼;
urllib.quote_plus(string [ , safe ] ) :與urllib.quote類似,但這個方法用’+’來替換’ ‘,而quote用’%20’來代替’ ‘
urllib.unquote_plus(string ) :對字元串進行解碼;
urllib.urlencode(query[, doseq]):将dict或者包含兩個元素的元組清單轉換成url參數。例如 字典{‘name’: ‘dark-bull’, ‘age’: 200}将被轉換為”name=dark-bull&age=200”
urllib.pathname2url(path):将本地路徑轉換成url路徑;
urllib.url2pathname(path):将url路徑轉換成本地路徑;
通過上面的練習可以知道,urlopen可以輕松擷取遠端html頁面資訊,然後通過python正則對所需要的資料進行分析,比對出想要用的資料,在利用urlretrieve将資料下載下傳到本地。對于通路受限或者對連接配接數有限制的遠端url位址可以采用proxies(代理的方式)連接配接,如果遠端資料量過大,單線程下載下傳太慢的話可以采用多線程下載下傳,這個就是傳說中的爬蟲。
用戶端與伺服器端通過request與response來溝通,用戶端先向服務端發送request,然後接收服務端傳回的response
urllib2提供了request的類,可以讓使用者在發送請求前先構造一個request的對象,然後通過urllib2.urlopen方法來發送請求
cookielib子產品的主要作用是提供可存儲cookie的對象,以便于與urllib2子產品配合使用來通路internet資源。例如可以利用本子產品的cookiejar類的對象來捕獲cookie并在後續連接配接請求時重新發送。coiokielib子產品用到的對象主要有下面幾個:cookiejar、filecookiejar、mozillacookiejar、lwpcookiejar。
cookiejar管理http cookie值、存儲http請求生成的cookie、向傳出的http請求添加cookie的對象。整個cookie都存儲在記憶體中,對cookiejar執行個體進行垃圾回收後cookie也将丢失。
filecookiejar檢索cookie資訊并将cookie存儲到檔案中。filename是存儲cookie的檔案名。delayload為true時支援延遲通路通路檔案,即隻有在需要時才讀取檔案或在檔案中存儲資料。
mozillacookiejar建立與mozilla浏覽器cookies.txt相容的filecookiejar執行個體。
lwpcookiejar建立與libwww-perl的set-cookie3檔案格式相容的filecookiejar執行個體。
cookielib子產品一般與urllib2子產品配合使用,主要用在urllib2.build_oper()函數中作為urllib2.httpcookieprocessor()的參數。
使用方法如下面登入人人網的代碼:
上面python腳本主要是使用了lxml的xpath文法進行快速查找。