python urllib庫
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:port user 用戶名或登錄 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()相同
python urllib庫