urllib模塊 | Python 2.7.11

官方文檔: https://docs.python.org/2/library/urllib.htmlhtml

某博客對官方文檔較全的翻譯: http://h2byte.com/post/tech/relation-bewteen-usllib-and-urllib2?action=show_rawpython

 

提供用於獲取互聯網上數據的高級接口緩存

打開https URL時不會嘗試驗證服務器證書服務器

1.接口:網絡

  1)urllib.urlopen(url[, data[, proxies[, context]]])函數

    相似於內建函數open(),但接收的不是文件名而是URL;post

    若沒法鏈接,將引起IOError異常;編碼

    若完成鏈接將返回一個類文件對象,該對象支持如下操做:url

      read() , readline() , readlines() , fileno() , close() : 這些函數與文件對象的同名函數有着相同的接口,使用方式與文件對象徹底同樣spa

      info() : 返回一個包含與該URL相關聯的元信息的mimetools.Message對象,若是是HTTP,則表明從服務器接收到的html文件中的header信息,若是是FTP,則會返回一個內容長度header(?),若是是本地文件,則包含文件最後一次修改時間、文件大小、文件類型等信息

      geturl() : 返回頁面的真實URL,一些服務器會將請求重定向到其餘的URL,urlopen()會自動處理重定向,geturl()函數能獲取到重定向後的URL

      getcode() : 若URL是HTTP類型的則獲取響應中的HTTP狀態碼,不然返回None

    代理.......不懂,待補充

  2)urllib.urlretrieve(url[, filename[, reporthook[, data]]])

    在必要時將該URL表示的網絡對象保存到本地文件,若url指向本地文件或有效緩存,則不進行保存

    返回一個tuple (filename, headers),filename是保存的文件名,headers是urlopen().info()返回的信息

    Exceptions與urlopen()的相同

    若是沒有指定保存的路徑,則保存爲臨時文件

    reporthook是一個回掉函數,接受三個參數(已接收數據塊數,數據塊大小(bytes),文件大小)

      在FTP連接中當header不存在Content-Type鍵時第三個參數文件大小可能爲-1

  3)urllib._urlopener ?

  4) urllib.urlcleanup()

    清除以前調用urllib.urlretrieve()所留下的緩存

2. 實用功能

  1)urllib.quote(string[, safe])

    用%xx替換string中的特殊字符,但字母、數字和一些字符('_.-')不會被替換

    一般這個函數針對URL中的路徑部分進行替換

    可選參數safe指定不用被替換的字符,默認值是'/'

  2)urllib.quote_plus(string[, safe])

    相似於urllib.quote(),但會用加號'+'替換空格,若加號不包括在safe參數中,string中的加號將會被轉義,產生相似HTML表單的數據

  3)urllib.unquote(string)

    urllib.quote()的反函數,將%xx轉換成相應的單字符

  4)urllib.unquote_plus(string)

    urllib.quote_plus()的反函數,相似於urllib.unquote(),但會把加號替換成空格

  5)urllib.urlencode(query[, doseq])

    將字典或包含兩個元素的元組序列轉換成"percent-encoded"(百分比編碼?)字符串,使其能被用於urlopen()的可選變量data,主要用於POST請求中傳遞表單

    轉換後的字符串是一系列用'&'分隔開的key=value對,key 和 value 都是用quote_plus()轉換過的

  6)urllib.pathname2url(path)

    將本地路徑轉換爲url,過程當中使用了quote()

  7)urllib.url2pathname(path)

    將url轉換爲本地路徑,過程當中使用了unquote()

  8)urllib.getproxies()  ?

3. URL Opener 對象

  1)class urllib.URLopener([proxies[, context[, **x509]]])

    打開和讀取URLs的基類;

    URLopener類默認狀況下發送urllib/VVV(VVV表明urllib的版本號)的User-Agent header,應用程序能夠經過URLopener和FancyURLopener的子類和設置類屬性version來定義User-Agent header

    可選參數proxies應該是字典類型描述的proxy URLs, 空字典會將proxy關閉, 默認值爲None

    context是一個ssl.SSLContext實例,定義opener打開https連接時的SSL

    附加關鍵字參數用於創建https連接中傳送SSL key 和 certificate

    當服務器返回錯誤碼時會引起IOError異常

      open(fullurl[, data])

        用適當的協議打開fullurl

        該方法設置緩存和代理信息後調用合適的open方法,若是方案未能識別,則調用open_unknown()

        data參數的意義與urlopen()中的data參數意義相同

      open_unknown(fullurl[, data])

        重寫接口,打開未知類型的URL

      retrieve(url[, filename[, reporthook[, data]]])

      version

        該變量爲opoener對象指定一個user agent,在子類中做爲類變量設置或者在構造函數中設置

  2)class urllib.FancyURLopener(...)

    FancyURLopener是URLopener的子類,定義了處理http狀態碼301, 302, 303, 307 和 401的方法

4. urllib的侷限

  當前僅支持HTTP,FTP和本地文件
  urlretrieve的caching特性被禁用了(until I find the time to hack proper processing of Expiration time headers.))
  可能會反覆等待一個鏈接創建而引發長延時
  對待ftp的文件和目錄,採用了不一樣的策略,可能會引發一些問題.做者建議使用ftplib模塊,或者繼承FancyOpener來改寫.
  不支持須要認證的代理
  URL的處理建議使用urlparser模塊
相關文章
相關標籤/搜索