Python urllib與urllib2

  Python中包含了兩個網絡模塊,分別是urllib與urllib2,urllib2是urllib的升級版,擁有更強大的功能。urllib,讓咱們能夠像讀文件同樣,讀取http與ftp。而urllib2,則在urllib的基礎上,提供了更多的接口,如cookie、代理、認證等更強大的功能。php

  urllib經常使用函數:html

    一、urllib.urlopen(url[, data[, proxies]]):   打開一個網址,並返回一個相似於文件的對象,對於該對對象,咱們能夠執行如下操做。python

      •   read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與文件對象徹底同樣;
      •     info():       返回一個httplib.HTTPMessage 對象,表示遠程服務器返回的頭信息;
      •     getcode(): 返回Http狀態碼。若是是http請求,200表示請求成功完成;404表示網址未找到;
      •     geturl():    返回請求的url;

      參數中的data,表示以post方式提交到web的參數,proxies用於設置代理,這兩個參數不多用到。web

    二、urllib.urlretrieve(url[, filename[, reporthook[, data]]]):  將遠程數據下載到本地。url,是網址,filename表示的是本地路徑,用於存放下載的數據,reporthook,是一個回調函數,當鏈接到服務器時,或者得到數據時,將調用該函數,data,用於post的數據。緩存

    三、urlcleanup()清除urlretrieve函數的緩存。服務器

    四、urllib中的一些字符編碼的輔助函數cookie

      • 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的經常使用函數:函數

    一、urllib2.urlopen(url[, data][, timeout])與urllib的函數同樣post

    二、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

相關文章
相關標籤/搜索