#!/usr/bin/env python # coding=utf-8 import urllib ''' urllib模塊:https://docs.python.org/2/library/urllib.html urllib.urlopen(url[, data[, proxies[, context]]]):經過URL打開網絡對象。若是沒有指定模式標識符,或模式標識符爲file:,將會打開一個本地文件,不然打開一個網絡服務器套接字。 若是出錯,拋出IOError異常。若是正常,返回一個相似文件的對象,這個對象的方法有:read(), readline(), readlines(), fileno(), close(), info(), getcode()和geturl()。 參數:data:http,POST請求的數據,須要urlencode()編碼。proxies:代理字典,若是爲空字典,則不用代理,若是爲None,則用環境中的代理。context:可能爲ssl.SSLContext的實例,配置SSL,用於HTTPS鏈接。 urllib.urlretrieve(url[, filename[, reporthook[, data[, context]]]]):複製URL的網絡對象到本地。返回值爲(filename,header)元組。 參數:filename:指定複製到本地的文件名。reporthook:指定一個回調函數,會在創建鏈接時和讀取每一個數據塊後調用,這個回調函數被傳入三個參數,第一個是已傳輸的數據塊數,第二個是一個數據塊的字節數,第三個是文件的總大小。data和context:與urlopen的相似。 urllib._urlopener:urlopen()和urlretrieve()返回FancyURLopener類的實例,能夠建立URLopener類或FancyURLopener類的子類,而後把子類的實例賦給_urlopener。 urllib.urlcleanup():清除由urlretrieve()產生的緩存。 urllib.quote(string[, safe]):把字符串裏的特殊字符用%xx代替。字母、數字和下劃線(_)老是不會被代替。safe參數指定不被替代的字符,默認是/。 urllib.quote_plus(string[, safe]):與quote()相似,同時空格也會用正號代替,而正號會用%xx代替。 urllib.unquote(string):把%xx還原爲特殊字符。 urllib.unquote_plus(string):把%xx還原爲特殊字符,包括空格。 urllib.urlencode(query[, doseq]):把兩元素的元組轉換爲編碼的字符串,如key=value,中間用&鏈接,可用於POST的請求。 urllib.pathname2url(path):把路徑從本地語法轉換爲URL。 urllib.url2pathname(path):把路徑的百分號編碼的URL轉成本地的語法。 urllib.getproxies():返回代模式標識與理服務器URL的對應字典。 ''' ''' URLopener類: class urllib.URLopener([proxies[, context[, **x509]]]):參數參考urlopen()。x509是另外的鍵值對,可用於https:的受權。 方法: open(fullurl[, data]):參考urlopen()。 open_unknown(fullurl[, data]):打開未知的URL類型。 retrieve(url[, filename[, reporthook[, data]]]): 參考urlretrieve()。 version:對象的User Agent。 FancyURLopener類: class urllib.FancyURLopener(...):URLopener類的子類。 方法: prompt_user_passwd(host, realm):對於給定的指定區域的主機,返回用戶驗證信息,以(user,password)元組的形式。 ''' ''' 異常 exception urllib.ContentTooShortError(msg[, content]):urlretrieve()函數檢測到下載的數據少於指望的數據(經過Content-Length header指定),拋出此異常。 ''' def test_urllib(): # 發起GET請求 f = urllib.urlopen('http://www.baidu.com') print f.read() # GET請求,傳於參數,來自官網 params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) # 參數字典 print '*' * 200 print params # GET f = urllib.urlopen('http://www.musi-cal.com/cgi-bin/query?%s' % params) print f.read() # POST請求,來自官網 f = urllib.urlopen('http://www.musi-cal.com/cgi-bin/query', params) print '*' * 200 print f.read() # 使用代理,來自官網,貌似不Work # proxies = {'http': 'http://proxy.example.com:8080/'} # opener = urllib.FancyURLopener(proxies) # f = opener.open('http://www.python.org') # print '*' * 200 # print f.read() # 不用代理,來自官網 opener = urllib.FancyURLopener({}) f = opener.open('http://www.python.org/') print '*' * 200 print f.read() # 下載到本地 f = urllib.urlretrieve('http://www.baidu.com') print '*' * 200 print f if __name__ == '__main__': test_urllib()
源碼可於github下載:https://github.com/gkimeeq/PythonLearning。html