python urllib庫,pythonurllib
python2和python3中的urllib
urllib提供了一個進階的 Web 通訊庫,支援基本的 Web 協議,如 HTTP、FTP 和 Gopher 協議,同時也支援對本地檔案的訪問。
具體來說,urllib 模組的功能是利用前面介紹的協議來從網際網路、區域網路、本地主機上下載資料。
使用這個模組就無須用到 httplib、ftplib和 gopherlib 這些模組了,除非需要用到更低層的功能。
Python 2 中有 urlib、urlparse、urllib2,以及其他內容。在 Python 3 中,所有這些相關模組都整合進了一個名為 urllib 的單一包中。
urlib 和 urlib2 中的內容整合進了 urlib.request模組中,urlparse 整合進了 urllib.parse 中。
Python 3 中的 urlib 包還包括 response、error 和robotparse 這些子模組。
URL的格式
prot_sch://net_loc/path;params?query#frag
URL的各個部分(Web地址的各個組件)
prot_sch 網路通訊協定或下載方案net_loc 伺服器所在地(也含有使用者資訊)path 使用斜杠(/)分割的檔案或CGI應用的路徑params 選擇性參數query 串連符(&)分割的一系列索引值對frag 指定文檔內特定錨的部分net_loc 可以進一步拆分成多個組件,一些是必備的,另一些是可選的:user:passwd@host:portuser 使用者名稱或登入passwd 使用者密碼host 運行web伺服器的電腦名稱或地址(必須的)port 連接埠號碼(如果不是預設的80)
urllib.parse模組在python2中叫做urlparse,在python3中已經改名為urllib.parse
urllib.parse 模組提供了一些準系統,用於處理 URL 字串。這些功能包括 urlparse()、urlunparse()和 urljoin()。
urlparse()將 urlstr 解析成一個 6 元組(prot_sch, net_loc, path, params, query, frag):
文法:urlparse(urlstr, defProtSch=None, allowFrag=None)>>> urllib.parse.urlparse("https://www.smelond.com?cat=6")ParseResult(scheme='https', netloc='www.smelond.com', path='', params='', query='cat=6', fragment='')
urlunparse()的功能與 urlpase()完全相反,其將經 urlparse()處理的 URL 產生 urltup 這個 6元組(prot_sch, net_loc, path, params, query, frag),拼接成 URL 並返回:
文法:urlunparse(urltup)>>> result = urllib.parse.urlparse("https://www.smelond.com")>>> print(result)ParseResult(scheme='https', netloc='www.smelond.com', path='', params='', query='', fragment='')>>> urllib.parse.urlunparse(result)'https://www.smelond.com'
在需要處理多個相關的 URL 時我們就需要使用 urljoin()的功能了,例如,一個 Web 頁中可能會產生一系列頁面 URL:
urljoin()取得根網域名稱,並將其根路徑(net_loc 及其前面的完整路徑,但是不包括末端的檔案)與 newurl 串連起來。
文法:urljoin (baseurl, newurl, allowFrag=None)>>> urllib.parse.urljoin("https://www.smelond.com?cat=6","?cat=7")'https://www.smelond.com?cat=7'>>> urllib.parse.urljoin("https://www.smelond.com?cat=6","abc")'https://www.smelond.com/abc'>>> urllib.parse.urljoin("https://www.smelond.com?cat=6","/test/abc.html")'https://www.smelond.com/test/abc.html'>>> urllib.parse.urljoin("https://www.smelond.com","abc.html")'https://www.smelond.com/abc.html'
urllib.parse 模組中的核心函數描述
urlparse(urlstr,defProSch=None,allowFrag=None) 將urlstr解析成各個組件,如果在urlstr中沒有給定協議或方案,則使用defProtSch;allowFrag 決定是否允許有 URL 片段urlunparse(urltup) 將 URL 資料(urltup)的一個元組拼成一個 URL 字串urljoin(baseurl, newurl, allowFrag=None) 將 URL 的根網域名稱和 newurl 拼合成一個完整的 URL;allowFrag 的作用和urlpase()相同