您好,登錄后才能下訂單哦!
因?yàn)樵谕鍼ython challenge的時(shí)候,有用過(guò)這個(gè)模塊,而且學(xué)習(xí)這個(gè)模塊之后也對(duì)系統(tǒng)學(xué)習(xí)網(wǎng)絡(luò)爬蟲有用。
當(dāng)時(shí)查了各種資料學(xué)習(xí),沒(méi)有碰官網(wǎng)文檔(因?yàn)檫€是對(duì)英語(yǔ)有抗拒性),但是還是官方的文檔最具權(quán)威和學(xué)習(xí)價(jià)值,因此想要此次翻譯官方文檔的同時(shí),鍛煉自己的英語(yǔ)能力,也對(duì)urllib模塊加深理解。
因?yàn)槭菫榱俗约簭?fù)習(xí)起來(lái)方便~所以就不一句英語(yǔ)一句中文的對(duì)照著翻了,有興趣看原版的,自己點(diǎn)官方文檔吧~
翻譯不足之處,請(qǐng)多指教
—我是分割線——-
Python 3.x版本后的urllib和urllib2
現(xiàn)在的Python已經(jīng)出到了3.5.2
在Python 3以后的版本中,urllib2這個(gè)模塊已經(jīng)不單獨(dú)存在(也就是說(shuō)當(dāng)你import urllib2時(shí),系統(tǒng)提示你沒(méi)這個(gè)模塊),urllib2被合并到了urllib中,叫做urllib.request 和 urllib.error 。
urllib整個(gè)模塊分為urllib.request, urllib.parse, urllib.error。
例:
其中urllib2.urlopen()變成了urllib.request.urlopen()
urllib2.Request()變成了urllib.request.Request()
urllib和urllib2模塊之間的區(qū)別
在python中,urllib和urllib2不可相互替代的。
整體來(lái)說(shuō),urllib2是urllib的增強(qiáng),但是urllib中有urllib2中所沒(méi)有的函數(shù)。
urllib2可以用urllib2.openurl中設(shè)置Request參數(shù),來(lái)修改Header頭。如果你訪問(wèn)一個(gè)網(wǎng)站,想更改User Agent(可以偽裝你的瀏覽器),你就要用urllib2.
urllib支持設(shè)置編碼的函數(shù),urllib.urlencode,在模擬登陸的時(shí)候,經(jīng)常要post編碼之后的參數(shù),所以要想不使用第三方庫(kù)完成模擬登錄,你就需要使用urllib。
urllib一般和urllib2一起搭配使用
官方文檔地址
翻譯的是Python 3.5.2版本,對(duì)應(yīng)的urllib
https://docs.python.org/3.5/library/urllib.html
urllib整體介紹
原地址:https://docs.python.org/3.5/library/urllib.html
翻譯的對(duì)應(yīng)的是21.6. urllib.request — Extensible library for opening URLs
urllib- - - - - - URL處理模塊
源代碼:Lib / urllib /
urllib是一個(gè)包,收集幾個(gè)模塊來(lái)處理網(wǎng)址:
urllib.request打開和瀏覽url中內(nèi)容
urllib.error包含從 urllib.request發(fā)生的錯(cuò)誤或異常
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提供的可擴(kuò)展類庫(kù)
源代碼:Lib / urllib / request.py
urllib.request模塊定義了方法和類,幫助打開url(主要是HTTP)在一個(gè)復(fù)雜的世界——基本和摘要式身份驗(yàn)證,重定向,cookies等等。
————-urllib.request模塊定義了以下功能:—————–
urllib.request.urlopen()
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
打開網(wǎng)址URL,這可以是一個(gè)字符串或一個(gè) Request對(duì)象。
數(shù)據(jù)必須是一個(gè)字節(jié)對(duì)象指定額外的數(shù)據(jù)發(fā)送到服務(wù)器或 None。如果沒(méi)有這樣的數(shù)據(jù)是必要的,數(shù)據(jù)也可能是一個(gè)iterable對(duì)象而且在這種情況下必須在最開始時(shí)指定內(nèi)容的長(zhǎng)度。目前HTTP是唯一一個(gè)這樣請(qǐng)求數(shù)據(jù)的,當(dāng)數(shù)據(jù)參數(shù)被提供時(shí),HTTP請(qǐng)求將會(huì)執(zhí)行POST請(qǐng)求而不是GET請(qǐng)求。
數(shù)據(jù)應(yīng)該是一個(gè)緩沖的在標(biāo)準(zhǔn)應(yīng)用程序中以 x-www-form-urlencoded的格式。 urllib.parse.urlencode()函數(shù)接受一個(gè)映射或序列集合,并返回一個(gè)ASCII文本字符串的格式。它應(yīng)該在被用作數(shù)據(jù)參數(shù)之前,被編碼為字節(jié)。
urllib.request 模塊 使用 HTTP/1.1協(xié)議,并且包括請(qǐng)求 Connection:close在HTTP請(qǐng)求頭。
可選的第二個(gè)超時(shí)參數(shù)timeout,用于阻塞操作,比如連接請(qǐng)求(如果未指定,全球?qū)⑹褂媚J(rèn)超時(shí)設(shè)置)。這實(shí)際上只適用于HTTP、HTTPS和FTP連接。
如果context被指定,它必須是一個(gè) ssl.SSLContext實(shí)例描述各種SSL選項(xiàng)。點(diǎn)擊HTTPSConnection查看更多細(xì)節(jié)。
可選cafile和capath參數(shù)指定一組被HTTPS請(qǐng)求信任的CA證書。cafile應(yīng)該指向一個(gè)文件包含CA證書的包,而capath應(yīng)該指向一個(gè)散列的證書文件的目錄。點(diǎn)擊ssl.SSLContext.load_verify_locations()查看更多的信息。
cadefault參數(shù)被忽略。
這個(gè)函數(shù)始終返回一個(gè)對(duì)象,像context(上下文) 管理者并提供這些方法
geturl()——返回URL的資源檢索,常常重定向之后使用
info()——返回頁(yè)面的元信息,如標(biāo)題,組成 email.message_from_string(的)實(shí)例(見快速參考HTTP頭)
getcode()——返回響應(yīng)的HTTP狀態(tài)代碼。
為HTTP和HTTPS url,這個(gè)函數(shù)返回的一個(gè) http.client.HTTPResponse對(duì)象略有不同。除了上面的三種新方法中,這個(gè)message屬性包含相同的信息像reason屬性——由服務(wù)器返回的原因——而不是響應(yīng)頭,因?yàn)樗谖臋n中指定 HTTPResponse。
FTP、文件和數(shù)據(jù)請(qǐng)求url和顯式地處理 URLopener和 FancyURLopener類,這個(gè)函數(shù)返回一個(gè) urllib.response.addinfourl對(duì)象。
urllib.request.urlopen()會(huì)在 URLError中拋出協(xié)議錯(cuò)誤。
請(qǐng)注意,,可能返回None,這在沒(méi)有處理程序處理請(qǐng)求(盡管全球默認(rèn)安裝 OpenerDirector并使用 UnknownHandler以確保這不會(huì)發(fā)生)時(shí)發(fā)生。
此外,如果檢測(cè)到代理設(shè)置(例如,當(dāng)一個(gè) *_proxy環(huán)境變量如 http_proxy已經(jīng)被設(shè)定),,ProxyHandler默認(rèn)安裝并確保請(qǐng)求都通過(guò)代理來(lái)處理。
遺留的 urllib.urlopen從Python 2.6和更早已經(jīng)被中斷;;urllib.request.urlopen()對(duì)應(yīng)于舊的 urllib2.urlopen。代理處理,是通過(guò)字典參數(shù)完成的 urllib.urlopen可以使用 ProxyHandler對(duì)象。
3.2版本的變化:cafile和capath被補(bǔ)充。
3.2版本的變化:如果可能的話,現(xiàn)在支持HTTPS虛擬主機(jī)(也就是說(shuō),如果 ssl.HAS_SNI是真的)。
在新的3.2版本:數(shù)據(jù)可以是一個(gè)iterable對(duì)象。
3.3版本的變化:cadefault被補(bǔ)充。
3.4.3版本的變化:context被補(bǔ)充。
urllib.request.install_opener(opener)
安裝一個(gè) OpenerDirector實(shí)例作為全球默認(rèn)的opener 。安裝一個(gè)opener 必要的,如果你想讓urlopen使用這個(gè)opener ;否則,簡(jiǎn)單地調(diào)用 OpenerDirector.open()而不是 urlopen()。這樣代碼不會(huì)檢查一個(gè)真實(shí)的 OpenerDirector并且任何類的適當(dāng)?shù)慕涌诙伎梢赃\(yùn)作。
urllib.request.build_opener([handler, …])
返回一個(gè)順序的鏈的處理程序 OpenerDirector的實(shí)例。處理程序可以是BaseHandler的實(shí)例,或者 BaseHandler的子類(在這種情況下,必須調(diào)用沒(méi)有參數(shù)的構(gòu)造函數(shù))。下面這些類的實(shí)例將提前處理程序,除非處理程序包含它們,或者它們子類的實(shí)例:ProxyHandler(如果檢測(cè)到代理設(shè)置), UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor.
如果Python安裝SSL支持(即如果 ssl模塊可以被導(dǎo)入), HTTPSHandler也將被添加。
一個(gè) BaseHandler子類也可以通過(guò)改變它的 handler_order屬性來(lái)修改它再處理程序列表中的位置。
urllib.request.pathname2url(path)
將路徑名轉(zhuǎn)換成路徑,從本地語(yǔ)法形式的路徑中使用一個(gè)URL的路徑組成部分。這不會(huì)產(chǎn)生一個(gè)完整的URL。它將返回引用 quote()函數(shù)的值。
urllib.request.url2pathname(path)
將路徑組件轉(zhuǎn)換為本地路徑的語(yǔ)法。這個(gè)不接受一個(gè)完整的URL。這個(gè)函數(shù)使用 unquote()解碼的通路。
urllib.request.getproxies()
這個(gè)helper函數(shù)返回一個(gè)日程表dictionary 去代理服務(wù)器的URL映射。掃描指定的環(huán)境變量 _proxy大小寫不敏感的方法,對(duì)所有的操作系統(tǒng),當(dāng)它不能找到它,從Mac OS X的Mac OSX系統(tǒng)配置和Windows系統(tǒng)注冊(cè)表中尋找代理信息。如果兩個(gè)大寫和小寫環(huán)境變量存在(或不一樣),小寫優(yōu)先。
請(qǐng)注意,如果環(huán)境變量 REQUEST_METHOD已被設(shè)置,這通常表明你在CGI腳本運(yùn)行環(huán)境,此時(shí)環(huán)境變量 HTTP_PROXY(大寫 _PROXY)將被忽略。這是因?yàn)樵撟兞靠梢员豢蛻舳耸褂米⑸洹按?”HTTP頭。如果你需要使用一個(gè)HTTP代理在CGI環(huán)境中,要么使用 ProxyHandler明確,或者確保變量名小寫(或至少是 _proxy后綴)。
——提供以下類:—————————————
類 urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
這個(gè)類是一個(gè)抽象的URL請(qǐng)求。
url應(yīng)該是一個(gè)字符串包含一個(gè)有效的url。
數(shù)據(jù)必須是一個(gè)字節(jié)對(duì)象指定額外的數(shù)據(jù)發(fā)送到服務(wù)器或 None。如果沒(méi)有這樣的數(shù)據(jù)是必要的,數(shù)據(jù)也可能是一個(gè)iterable對(duì)象而且在這種情況下必須在最開始時(shí)指定內(nèi)容的長(zhǎng)度。目前HTTP是唯一一個(gè)這樣請(qǐng)求數(shù)據(jù)的,當(dāng)數(shù)據(jù)參數(shù)被提供時(shí),HTTP請(qǐng)求將會(huì)執(zhí)行POST請(qǐng)求而不是GET請(qǐng)求。
數(shù)據(jù)應(yīng)該是一個(gè)緩沖的在標(biāo)準(zhǔn)應(yīng)用程序中以 x-www-form-urlencoded的格式。 urllib.parse.urlencode()函數(shù)接受一個(gè)映射或序列集合,并返回一個(gè)ASCII文本字符串的格式。它應(yīng)該在被用作數(shù)據(jù)參數(shù)之前,被編碼為字節(jié)。
headers 應(yīng)該是一個(gè)字典,如果 add_header()被稱為與每個(gè)鍵和值作為參數(shù)。這通常是用來(lái)“惡搞” User-Agent頭的值,因?yàn)槭褂靡粋€(gè)瀏覽器識(shí)別本身——一些常見HTTP服務(wù)器只允許請(qǐng)求來(lái)自瀏覽器而不是腳本。例如,Mozilla Firefox可能識(shí)別本身 “Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。而 urllib默認(rèn)的用戶代理字符串 是”Python-urllib/2.6”在Python 2.6()。
一個(gè)Content-Type header的例子 用數(shù)據(jù)論證將發(fā)送一個(gè)字典 {“Content-Type”:”application/x-www-form-urlencoded”}。
最后兩個(gè)參數(shù)只是正確處理第三方HTTP cookie:
origin_req_host應(yīng)該請(qǐng)求原始的主機(jī)交易,就像定義的RFC 2965。它默認(rèn)為 http.cookiejar.request_host(self)。這是原始請(qǐng)求的主機(jī)名或IP地址,由用戶發(fā)起。例如。如果請(qǐng)求是一個(gè)圖像在HTML文檔中,這應(yīng)該是請(qǐng)求的請(qǐng)求主機(jī)包含圖像的頁(yè)面。
無(wú)法核實(shí)的表明是否應(yīng)該請(qǐng)求是無(wú)法核實(shí)的,這由RFC 2965定義。它默認(rèn)為 False。一個(gè)無(wú)法核實(shí)的請(qǐng)求的URL的用戶沒(méi)有允許的選擇。例如,如果請(qǐng)求是一個(gè)圖像在一個(gè)HTML文檔,和用戶沒(méi)有選擇通過(guò)圖像的自動(dòng)抓取,這應(yīng)該是正確的。
這個(gè)方法應(yīng)該是一個(gè)字符串,表示將使用(如HTTP請(qǐng)求方法。 ‘HEAD’)。如果提供,其值是存儲(chǔ)在 method屬性和使用 get_method()。通過(guò)設(shè)置子類可能表明一個(gè)默認(rèn)的方法 method類本身的屬性。
3.3版本的變化::Request.method參數(shù)是添加到請(qǐng)求類。
3.4版本的變化:默認(rèn)的 Request.method可能會(huì)顯示在類級(jí)別。
類urllib.request.OpenerDirector
OpenerDirector類打開url并通過(guò) BaseHandler連接在一起。它管理處理程序的連接,和恢復(fù)錯(cuò)誤。
類 urllib.request.BaseHandler
這是對(duì)于所有已注冊(cè)的處理程序的基類
類 urllib.request.HTTPRedirectHandler
一個(gè)類來(lái)處理重定向
類urllib.request.HTTPCookieProcessor(cookiejar=None)
一個(gè)類來(lái)處理HTTP cookie。
類 urllib.request.ProxyHandler(proxies=None)
導(dǎo)致請(qǐng)求通過(guò)一個(gè)代理。如果代理是給定的,它必須是一個(gè)字典的代理協(xié)議名稱映射到url。默認(rèn)值是從環(huán)境變量的列表 _proxy中讀取代理。如果沒(méi)有代理設(shè)置環(huán)境變量,那么在Windows環(huán)境中代理設(shè)置了從注冊(cè)表部分的網(wǎng)絡(luò)設(shè)置,在Mac OS X環(huán)境代理信息檢索的OS X系統(tǒng)配置框架。
禁用一個(gè)代理傳遞一個(gè)空的字典。
no_proxy環(huán)境變量可以被用來(lái)指定主機(jī)不能通過(guò)代理;如果設(shè)置,它應(yīng)該是一個(gè)以逗號(hào)分隔的主機(jī)名后綴??蛇x :port附加為例 cern.ch,ncsa.uiuc.edu,some.host:8080.
請(qǐng)注意HTTP_PROXY如果一個(gè)變量將被忽略 REQUEST_METHOD設(shè)置;參見文檔 getproxies().
類 urllib.request.HTTPPasswordMgr
保持一個(gè)數(shù)據(jù)庫(kù) (realm, uri) -> (user, password)映射。
類 urllib.request.HTTPPasswordMgrWithDefaultRealm
保持一個(gè)數(shù)據(jù)庫(kù) (realm, uri) -> (user, password)映射。一個(gè)領(lǐng)域 None被認(rèn)為是一個(gè)全方位領(lǐng)域,如果沒(méi)有其他搜索領(lǐng)域
類 urllib.request.HTTPPasswordMgrWithPriorAuth
一個(gè)變體 HTTPPasswordMgrWithDefaultRealm還有一個(gè)數(shù)據(jù)庫(kù) uri -> is_authenticated的映射??梢允褂肂asicAuth處理程序來(lái)確定當(dāng)發(fā)送身份驗(yàn)證憑證立即而不是等待 401響應(yīng)。
類 urllib.request.AbstractBasicAuthHandler(password_mgr=None)
這是mixin類,幫助與HTTP身份驗(yàn)證,遠(yuǎn)程主機(jī)和代理。果有password_mgr,應(yīng)該是兼容 HTTPPasswordMgr的。請(qǐng)參閱部分 HTTPPasswordMgr對(duì)象必須支持的接口信息。如果passwd_mgr還提供了 is_authenticated和 update_authenticated方法(見 HTTPPasswordMgrWithPriorAuth對(duì)象),然后處理程序?qū)⑹褂?is_authenticated結(jié)果對(duì)于一個(gè)給定的URI來(lái)決定是否發(fā)送請(qǐng)求的身份驗(yàn)證憑證。如果 is_authenticated返回 TrueURI,憑證發(fā)送。如果 is_authenticated是 False憑證不發(fā)送,然后如果 401收到響應(yīng)請(qǐng)求發(fā)送身份驗(yàn)證憑證。如果身份驗(yàn)證成功, update_authenticated被稱為設(shè)置 is_authenticated TrueURI,這樣后續(xù)請(qǐng)求的URI或任何super-URIs將自動(dòng)包括身份驗(yàn)證憑證。
在新的3.5版本:添加 is_authenticated支持。
類 urllib.request.HTTPBasicAuthHandler(password_mgr=None)
與遠(yuǎn)程主機(jī)處理身份驗(yàn)證。如果有password_mgr,應(yīng)該是兼容HTTPPasswordMgr的。請(qǐng)參閱部分 HTTPPasswordMgr對(duì)象必須支持的接口信息。HTTPBasicAuthHandler將提高 ValueError當(dāng)面對(duì)一個(gè)錯(cuò)誤的身份驗(yàn)證方案。
類 urllib.request.ProxyBasicAuthHandler(password_mgr=None)
處理與代理身份的驗(yàn)證。如果有password_mgr,應(yīng)該是兼容 HTTPPasswordMgr的。請(qǐng)參閱部分 HTTPPasswordMgr對(duì)象必須支持的接口信息。
類urllib.request.AbstractDigestAuthHandler(password_mgr=None)
這是mixin類,幫助與HTTP身份驗(yàn)證,遠(yuǎn)程主機(jī)和代理。password_mgr,如果有,應(yīng)該是兼容的 HTTPPasswordMgr;請(qǐng)參閱部分 HTTPPasswordMgr對(duì)象必須支持的接口信息
類urllib.request.HTTPDigestAuthHandler(password_mgr=None)
與遠(yuǎn)程主機(jī)處理身份驗(yàn)證。如果有password_mgr,應(yīng)該是兼容 HTTPPasswordMgr的;請(qǐng)參閱部分 HTTPPasswordMgr對(duì)象必須支持的接口信息。摘要式身份驗(yàn)證處理程序和基本身份驗(yàn)證處理器都是補(bǔ)充說(shuō),摘要式身份驗(yàn)證總是嘗試第一次。如果主機(jī)返回一個(gè)40 x再次回應(yīng),它發(fā)送到基本身份驗(yàn)證處理程序來(lái)處理。這個(gè)處理程序方法將提高 ValueError當(dāng)面對(duì)除了消化或基本身份驗(yàn)證方案。
3.3版本的變化:提高 ValueError不支持的身份驗(yàn)證方案。
類urllib.request.ProxyDigestAuthHandler(password_mgr=None)
處理與代理身份驗(yàn)證。如果有password_mgr,應(yīng)該是兼容 HTTPPasswordMgr的;請(qǐng)參閱部分 HTTPPasswordMgr對(duì)象必須支持的接口信息
類 urllib.request.HTTPHandler
一個(gè)類來(lái)處理HTTP url
類 urllib.request.HTTPSHandler(debuglevel=0, context=None, check_hostname=None)
一個(gè)類來(lái)處理開放的HTTPS url。在context 文和check_hostname有相同的意義 http.client.HTTPSConnection.
3.2版本的變化:context and check_hostname被補(bǔ)充。
類 urllib.request.FileHandler
打開本地文件
類 urllib.request.DataHandler
開放數(shù)據(jù)的url
類 urllib.request.FTPHandler
開放的FTP url
類 urllib.request.CacheFTPHandler
打開FTP url,保持打開的FTP連接緩存來(lái)減少延遲
類 urllib.request.UnknownHandler
全方位類處理未知的url。
類 urllib.request.HTTPErrorProcessor
HTTP錯(cuò)誤響應(yīng)過(guò)程。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。