Python中包含了兩個網絡模塊,分別是urllib與urllib2,urllib2是urllib的升級版,擁有更強大的功能。urllib,讓我們可以像讀文件一樣,讀取http與ftp。而urllib2,則在urllib的基礎上,提供了更多的接口,如cookie、代理、認證等更強大的功能。
urllib常用函數:
1、urllib.urlopen(url[, data[, proxies]]): 打開一個網址,並返回一個類似於文件的對象,對於該對對象,我們可以執行以下操作。
-
-
- read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與文件對象完全一樣;
- info(): 返回一個httplib.HTTPMessage 對象,表示遠程服務器返回的頭信息;
- getcode(): 返回Http狀態碼。如果是http請求,200表示請求成功完成;404表示網址未找到;
- geturl(): 返回請求的url;
-
參數中的data,表示以post方式提交到web的參數,proxies用於設置代理,這兩個參數很少用到。
2、urllib.urlretrieve(url[, filename[, reporthook[, data]]]): 將遠程數據下載到本地。url,是網址,filename表示的是本地路徑,用於存放下載的數據,reporthook,是一個回調函數,當連接到服務器時,或者獲得數據時,將調用該函數,data,用於post的數據。
3、urlcleanup()清除urlretrieve函數的緩存。
4、urllib中的一些字符編碼的輔助函數
-
-
- 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路徑轉換成本地路徑
-
針對上面的一個樣例:
1 # coding : UTF-8 2 3 import urllib 4 import re 5 ''' 6 def getHtml(url): 7 urlFile = urllib.urlopen(url) 8 urllib.FancyURLopener 9 print urlFile.getcode() 10 return urlFile.read() 11 12 def getJpg(html): 13 reg = r'src="(http://.*?\.jpg)"' 14 index = 0 15 imgre = re.compile(reg) 16 jpgs = re.findall(imgre, html) 17 for x in jpgs: 18 print "url = %s %d.jpg\n" % (x, index) 19 urllib.urlretrieve(x, "C:\Users\Hawk\Desktop\jpg\%d.jpg" % index) 20 index = index + 1 21 22 23 html = getHtml(r"http://image.baidu.com/") 24 print "Game Over "*3 25 ''' 26 27 data = 'name = ~a+3' 28 29 data1 = urllib.quote(data) 30 print data1 # result: name%20%3D%20%7Ea%2B3 31 print urllib.unquote(data1) # result: name = ~a+3 32 33 data2 = urllib.quote_plus(data) 34 print data2 # result: name+%3D+%7Ea%2B3 35 print urllib.unquote_plus(data2) # result: name = ~a+3 36 37 data3 = urllib.urlencode({ 'name': 'dark-bull', 'age': 200 }) 38 print data3 # result: age=200&name=dark-bull 39 40 data4 = urllib.pathname2url(r'd:/a/b/c/23.php') 41 print data4 # result: ///D|/a/b/c/23.php 42 print urllib.url2pathname(data4) # result: D:/a/b/c/23.php
urllib2的常用函數:
1、urllib2.urlopen(url[, data][, timeout])與urllib的函數一樣
2、urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable]),
url:是網址、文件路徑、ftp路徑
data:通過urllib.urlencode形成的字符串。
header:請求頭
后兩個參數:用於第三方的cookie,詳情可參看官網。http://docs.python.org/2/library/urllib2.html#urllib2.BaseHandler