Python3的urllib模組的變化和介紹

來源:互聯網
上載者:User

標籤:word   預設值   host   而且   類比登入   映射   urlencode   blank   提示   

78957901

Python 3.x版本後的urllib和urllib2

現在的Python已經出到了3.5.2

在Python 3以後的版本中,urllib2這個模組已經不單獨存在(也就是說當你import urllib2時,系統提示你沒這個模組),urllib2被合并到了urllib中,叫做urllib.request 和 urllib.error 。

urllib整個模組分為urllib.request, urllib.parse, urllib.error。

例: 
其中urllib2.urlopen()變成了urllib.request.urlopen() 
urllib2.Request()變成了urllib.request.Request()

urllib和urllib2模組之間的區別
  1. 在python中,urllib和urllib2不可相互替代的。

  2. 整體來說,urllib2是urllib的增強,但是urllib中有urllib2中所沒有的函數。

  3. urllib2可以用urllib2.openurl中設定Request參數,來修改Header頭。如果你訪問一個網站,想更改User Agent(可以偽裝你的瀏覽器),你就要用urllib2.

  4. urllib支援設定編碼的函數,urllib.urlencode,在類比登陸的時候,經常要post編碼之後的參數,所以要想不使用第三方庫完成類比登入,你就需要使用urllib。

  5. urllib一般和urllib2一起搭配使用

官方文檔地址

翻譯的是Python 3.5.2版本,對應的urllib

https://docs.python.org/3.5/library/urllib.html

urllib整體介紹

原地址:https://docs.python.org/3.5/library/urllib.html

翻譯的對應的是21.6. urllib.request — Extensible library for opening URLs

urllib- - - - - - URL處理模組

原始碼:Lib / urllib /

urllib是一個包,收集幾個模組來處理網址:

urllib.request開啟和瀏覽url中內容 
urllib.error包含從 urllib.request發生的錯誤或異常 
urllib.parse解析url 
urllib.robotparser解析 robots.txt檔案

urllib.request

原地址: 
https://docs.python.org/3.5/library/urllib.request.html#module-urllib.request

urllib.request — 為開啟url提供的可擴充類庫

原始碼:Lib / urllib / request.py

urllib.request模組定義了方法和類,協助開啟url(主要是HTTP)在一個複雜的世界——基本和摘要式驗證,重新導向,cookies等等。

————-urllib.request模組定義了以下功能:—————–

urllib.request.urlopen()

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

開啟網址URL,這可以是一個字串或一個 Request對象。

資料必須是一個位元組對象指定額外的資料發送到伺服器或 None。如果沒有這樣的資料是必要的,資料也可能是一個iterable對象而且在這種情況下必須在最開始時指定內容的長度。目前HTTP是唯一一個這樣請求資料的,當資料參數被提供時,HTTP請求將會執行POST請求而不是GET請求。

資料應該是一個緩衝的在標準應用程式中以 x-www-form-urlencoded的格式。 urllib.parse.urlencode()函數接受一個映射或序列集合,並返回一個ASCII文本字串的格式。它應該在被用作資料參數之前,被編碼為位元組。

urllib.request 模組 使用 HTTP/1.1協議,並且包括請求 Connection:close在HTTP要求標頭。

可選的第二個逾時參數timeout,用於阻塞操作,比如串連請求(如果未指定,全球將使用預設逾時設定)。這實際上只適用於HTTP、HTTPS和FTP串連。

如果context被指定,它必須是一個 ssl.SSLContext執行個體描述各種SSL選項。點擊HTTPSConnection查看更多細節。

可選cafile和capath參數指定一組被HTTPS請求信任的CA認證。cafile應該指向一個檔案包含CA認證的包,而capath應該指向一個散列的認證檔案的目錄。點擊ssl.SSLContext.load_verify_locations()查看更多的資訊。

cadefault參數被忽略。

這個函數始終返回一個對象,像context(上下文) 管理者並提供這些方法

  • geturl()——返回URL的資源檢索,常常重新導向之後使用

  • info()——返回頁面的元資訊,如標題,組成 email.message_from_string(的)執行個體(見快速參考HTTP頭)

  • getcode()——返迴響應的HTTP狀態碼。

為HTTP和HTTPS url,這個函數返回的一個 http.client.HTTPResponse對象略有不同。除了上面的三種新方法中,這個message屬性包含相同的資訊像reason屬性——由伺服器返回的原因——而不是回應標頭,因為它在文檔中指定 HTTPResponse。

FTP、檔案和資料請求url和顯式地處理 URLopener和 FancyURLopener類,這個函數返回一個 urllib.response.addinfourl對象。

urllib.request.urlopen()會在 URLError中拋出協議錯誤。

請注意,,可能返回None,這在沒有處理常式處理請求(儘管全球預設安裝 OpenerDirector並使用 UnknownHandler以確保這不會發生)時發生。

此外,如果檢測到代理設定(例如,當一個 *_proxy環境變數如 http_proxy已經被設定),,ProxyHandler預設安裝並確保請求都通過代理來處理。

遺留的 urllib.urlopen從Python 2.6和更早已經被中斷;;urllib.request.urlopen()對應於舊的 urllib2.urlopen。代理處理,是通過字典參數完成的 urllib.urlopen可以使用 ProxyHandler對象。

3.2版本的變化:cafile和capath被補充。

3.2版本的變化:如果可能的話,現在支援HTTPS虛擬機器主機(也就是說,如果 ssl.HAS_SNI是真的)。

在新的3.2版本:資料可以是一個iterable對象。

3.3版本的變化:cadefault被補充。

3.4.3版本的變化:context被補充。

urllib.request.install_opener(opener)

安裝一個 OpenerDirector執行個體作為全球預設的opener 。安裝一個opener 必要的,如果你想讓urlopen使用這個opener ;否則,簡單地調用 OpenerDirector.open()而不是 urlopen()。這樣代碼不會檢查一個真實的 OpenerDirector並且任何類的適當的介面都可以運作。

urllib.request.build_opener([handler, …])

返回一個順序的鏈的處理常式 OpenerDirector的執行個體。處理常式可以是BaseHandler的執行個體,或者 BaseHandler的子類(在這種情況下,必須調用沒有參數的建構函式)。下面這些類的執行個體將提前處理常式,除非處理常式包含它們,或者它們子類的執行個體:ProxyHandler(如果檢測到代理設定), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.

如果Python安裝SSL支援(即如果 ssl模組可以被匯入), HTTPSHandler也將被添加。

一個 BaseHandler子類也可以通過改變它的 handler_order屬性來修改它再處理常式列表中的位置。

urllib.request.pathname2url(path)

將路徑名轉換成路徑,從本地文法形式的路徑中使用一個URL的路徑組成部分。這不會產生一個完整的URL。它將返回引用 quote()函數的值。

urllib.request.url2pathname(path)

將路徑組件轉換為本地路徑的文法。這個不接受一個完整的URL。這個函數使用 unquote()解碼的通路。

urllib.request.getproxies()

這個helper函數返回一個議程表dictionary 去Proxy 伺服器的URL映射。掃描指定的環境變數 _proxy大小寫不敏感的方法,對所有的作業系統,當它不能找到它,從Mac OS X的Mac OSX系統配置和Windows系統註冊表中尋找代理資訊。如果兩個大寫和小寫環境變數存在(或不一樣),小寫優先。

請注意,如果環境變數 REQUEST_METHOD已被設定,這通常表明你在CGI指令碼運行環境,此時環境變數 HTTP_PROXY(大寫 _PROXY)將被忽略。這是因為該變數可以被用戶端使用注射“代理:”HTTP頭。如果你需要使用一個HTTP代理在CGI環境中,要麼使用 ProxyHandler明確,或者確保變數名小寫(或至少是 _proxy尾碼)。

——提供以下類:—————————————

類 urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

這個類是一個抽象的URL請求。

url應該是一個字串包含一個有效url。

資料必須是一個位元組對象指定額外的資料發送到伺服器或 None。如果沒有這樣的資料是必要的,資料也可能是一個iterable對象而且在這種情況下必須在最開始時指定內容的長度。目前HTTP是唯一一個這樣請求資料的,當資料參數被提供時,HTTP請求將會執行POST請求而不是GET請求。

資料應該是一個緩衝的在標準應用程式中以 x-www-form-urlencoded的格式。 urllib.parse.urlencode()函數接受一個映射或序列集合,並返回一個ASCII文本字串的格式。它應該在被用作資料參數之前,被編碼為位元組。

headers 應該是一個字典,如果 add_header()被稱為與每個鍵和值作為參數。這通常是用來“惡搞” User-Agent頭的值,因為使用一個瀏覽器識別本身——一些常見HTTP伺服器只允許請求來自瀏覽器而不是指令碼。例如,Mozilla Firefox可能識別本身 “Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。而 urllib預設的使用者代理程式字串 是”Python-urllib/2.6”在Python 2.6()。

一個Content-Type header的例子 用資料論證將發送一個字典 {“Content-Type”:”application/x-www-form-urlencoded”}。

最後兩個參數只是正確處理第三方HTTP cookie:

origin_req_host應該請求原始的主機交易,就像定義的RFC 2965。它預設為 http.cookiejar.request_host(self)。這是原始請求的主機名稱或IP地址,由使用者發起。例如。如果請求是一個映像在HTML文檔中,這應該是請求的請求主機包含映像的頁面。

無法核實的表明是否應該請求是無法核實的,這由RFC 2965定義。它預設為 False。一個無法核實的請求的URL的使用者沒有允許的選擇。例如,如果請求是一個映像在一個HTML文檔,和使用者沒有選擇通過映像的自動抓取,這應該是正確的。

這個方法應該是一個字串,表示將使用(如HTTP要求方法。 ‘HEAD’)。如果提供,其值是儲存在 method屬性和使用 get_method()。通過設定子類可能表明一個預設的方法 method類本身的屬性。

3.3版本的變化::Request.method參數是添加到請求類。

3.4版本的變化:預設的 Request.method可能會顯示在類層級。

類urllib.request.OpenerDirector

OpenerDirector類開啟url並通過 BaseHandler串連在一起。它管理處理常式的串連,和恢複錯誤。

類 urllib.request.BaseHandler

這是對於所有登入的處理常式的基類

類 urllib.request.HTTPRedirectHandler

一個類來處理重新導向

類urllib.request.HTTPCookieProcessor(cookiejar=None)

一個類來處理HTTP cookie。

類 urllib.request.ProxyHandler(proxies=None)

導致請求通過一個代理。如果代理是給定的,它必須是一個字典的代理協議名稱映射到url。預設值是從環境變數的列表 _proxy中讀取代理。如果沒有代理設定環境變數,那麼在Windows環境中代理設定了從註冊表部分的網路設定,在Mac OS X環境代理資訊檢索的OS X系統組態架構。

禁用一個代理傳遞一個空的字典。

no_proxy環境變數可以被用來指定主機不能通過代理;如果設定,它應該是一個以逗號分隔的主機名稱尾碼。可選 :port附加為例 cern.ch,ncsa.uiuc.edu,some.host:8080.

請注意HTTP_PROXY如果一個變數將被忽略 REQUEST_METHOD設定;參見文檔 getproxies().

類 urllib.request.HTTPPasswordMgr

保持一個資料庫 (realm, uri) -> (user, password)映射。

類 urllib.request.HTTPPasswordMgrWithDefaultRealm

保持一個資料庫 (realm, uri) -> (user, password)映射。一個領域 None被認為是一個全方位領域,如果沒有其他搜尋領域

類 urllib.request.HTTPPasswordMgrWithPriorAuth

一個變體 HTTPPasswordMgrWithDefaultRealm還有一個資料庫 uri -> is_authenticated的映射。可以使用BasicAuth處理常式來確定當發送身分識別驗證憑證立即而不是等待 401響應。

類 urllib.request.AbstractBasicAuthHandler(password_mgr=None)

這是mixin類,協助與HTTP身分識別驗證,遠程主機和代理。果有password_mgr,應該是相容 HTTPPasswordMgr的。請參閱部分 HTTPPasswordMgr對象必須支援的介面資訊。如果passwd_mgr還提供了 is_authenticated和 update_authenticated方法(見 HTTPPasswordMgrWithPriorAuth對象),然後處理常式將使用 is_authenticated結果對於一個給定的URI來決定是否發送請求的身分識別驗證憑證。如果 is_authenticated返回 TrueURI,憑證發送。如果 is_authenticated是 False憑證不發送,然後如果 401收到響應請求發送身分識別驗證憑證。如果身分識別驗證成功, update_authenticated被稱為設定 is_authenticated TrueURI,這樣後續請求的URI或任何super-URIs將自動包括身分識別驗證憑證。

在新的3.5版本:添加 is_authenticated支援。

類 urllib.request.HTTPBasicAuthHandler(password_mgr=None)

與遠程主機處理身分識別驗證。如果有password_mgr,應該是相容HTTPPasswordMgr的。請參閱部分 HTTPPasswordMgr對象必須支援的介面資訊。HTTPBasicAuthHandler將提高 ValueError當面對一個錯誤的身分識別驗證方案。

類 urllib.request.ProxyBasicAuthHandler(password_mgr=None)

處理與代理身份的驗證。如果有password_mgr,應該是相容 HTTPPasswordMgr的。請參閱部分 HTTPPasswordMgr對象必須支援的介面資訊。

類urllib.request.AbstractDigestAuthHandler(password_mgr=None)

這是mixin類,協助與HTTP身分識別驗證,遠程主機和代理。password_mgr,如果有,應該是相容的 HTTPPasswordMgr;請參閱部分 HTTPPasswordMgr對象必須支援的介面資訊

類urllib.request.HTTPDigestAuthHandler(password_mgr=None)

與遠程主機處理身分識別驗證。如果有password_mgr,應該是相容 HTTPPasswordMgr的;請參閱部分 HTTPPasswordMgr對象必須支援的介面資訊。摘要式驗證處理常式和基本驗證處理器都是補充說,摘要式驗證總是嘗試第一次。如果主機返回一個40 x再次回應,它發送到基本驗證處理常式來處理。這個處理常式方法將提高 ValueError當面對除了消化或基本驗證方案。

3.3版本的變化:提高 ValueError不支援的身分識別驗證方案。

類urllib.request.ProxyDigestAuthHandler(password_mgr=None)

處理與Proxy 驗證。如果有password_mgr,應該是相容 HTTPPasswordMgr的;請參閱部分 HTTPPasswordMgr對象必須支援的介面資訊

類 urllib.request.HTTPHandler

一個類來處理HTTP url

類 urllib.request.HTTPSHandler(debuglevel=0, context=None, check_hostname=None)

一個類來處理開放的HTTPS url。在context 文和check_hostname有相同的意義 http.client.HTTPSConnection.

3.2版本的變化:context and check_hostname被補充。

類 urllib.request.FileHandler

開啟本地檔案

類 urllib.request.DataHandler

開放資料的url

類 urllib.request.FTPHandler

開放的FTP url

類 urllib.request.CacheFTPHandler

開啟FTP url,保持開啟的FTP串連緩衝來減少延遲

類 urllib.request.UnknownHandler

全方位類處理未知的url。

類 urllib.request.HTTPErrorProcessor

HTTP錯誤響應過程。

Python3的urllib模組的變化和介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.