1. 程式人生 > >python urllib庫

python urllib庫

一個 err 局域網 可選 html 完全 urllib2 www 本地文件

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庫