urllib.parse - 將URL解析爲組件html
urllib.parse
定義了一個標準接口,用於在組件中解析統一資源定位符(URL)字符串(尋址方案,網絡位置,路徑等),將組件組合回URL字符串,並將「相對URL」轉換爲絕對URL給出「基本URL」。python
該模塊旨在匹配相對統一資源定位器上的Internet RFC。它支持下列URL方案:file
,ftp
,gopher
,hdl
,http
,https
,imap
,mailto
,mms
, news
,nntp
,prospero
,rsync
,rtsp
,rtspu
,sftp
, shttp
,sip
,sips
,snews
,svn
,svn+ssh
,telnet
, wais
,ws
,wss
。網絡
urllib.parse
模塊定義了分爲兩大類的功能:URL解析和URL引用。app
URL解析功能側重於將URL字符串拆分爲其組件,或者將URL組件組合爲URL字符串。ssh
將URL解析爲六個組件,返回一個6個元素的元組,對應URL的通常結構:scheme://netloc/path;parameters?query#fragment
。每一個元組項都是一個字符串,可能爲空。組件不會以較小的部分分解(例如,網絡位置是單個字符串),而且不會展開%escapes。如上所示的分隔符不是結果的一部分,除了路徑組件中的前導斜槓,若是存在則保留。例如:ide
>>> from urllib.parse import urlparse >>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') >>> o ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> o.scheme 'http' >>> o.port 80 >>> o.geturl() 'http://www.cwi.nl:80/%7Eguido/Python.html'
只有在'//'正確引入的狀況下, urlparse纔會識別netloc。不然,假定輸入是一個相對URL,將以路徑組件開始svn
>>> from urllib.parse import urlparse >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html') ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('www.cwi.nl/%7Eguido/Python.html') ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('help/Python.html') ParseResult(scheme='', netloc='', path='help/Python.html', params='', query='', fragment='')
scheme參數給出了默認的尋址方案,只有在URL沒有指定尋址方案時才使用。它應該是與urlstring相同的類型(文本或字節),只是默認值''
老是容許的,並在適當時自動轉換爲''
。函數
若是allow_fragments
參數爲false,則沒法識別片斷標識符。相反,它們被解析爲路徑,參數或查詢組件的一部分,並fragment
在返回值中設置爲空字符串。ui
返回值是一個元組,這樣咱們能夠經過索引或者嗎命名屬性訪問,以下:編碼
屬性 | 索引 | 值 | Value if not present |
---|---|---|---|
scheme | 0 | 協議 | scheme參數 |
netloc | 1 | 網絡位置部分 | 空字符串 |
path | 2 | 分層路徑 | 空字符串 |
params | 3 | 最後一個路徑元素的參數 | 空字符串 |
query | 4 | 查詢 | 空字符串 |
fragment | 5 | 信息片斷 | 空字符串 |
username | 用戶名 | None | |
password | 密碼 | None | |
hostname | 主機名 | None | |
port | 端口號 | None |
若是在URL中指定了無效端口,則讀取該port
屬性將引起ValueError
異常。
netloc屬性中不匹配的方括號將引起ValueError。
與全部命名元組的狀況同樣,子類還有一些特別有用的附加方法和屬性。一種這樣的方法是_replace()
。該_replace()
方法將返回一個新的ParseResult對象,用新值替換指定的字段。
>>> from urllib.parse import urlparse >>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html') >>> u ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> u._replace(scheme='http') ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
bytes.decode()
方法所接受的那樣。keep_blank_values
是一個標誌,指示百分比編碼的查詢中的空白值是否應該被視爲空白字符串。true值指示空白應保留爲空白字符串。默認的false值表示要忽略空白值,並將其視爲未包含。strict_parser
是一個標誌,指示如何處理解析錯誤。若是爲false(默認值),錯誤將被默認忽略。若是爲真,錯誤將引起ValueError異常。encoding
和errors
參數指定如何將百分比編碼的序列解碼爲Unicode字符,正如bytes.decode()方法所接受的那樣。max_num_fields
是要讀取的字段的最大數量。若是設置,則若是讀取的字段超過max_num_fields,則拋出ValueError。這相似於urlparse(),但不會從URL中分割參數。若是須要將容許參數應用於URL路徑部分的每一個段的最新URL語法(請參閱RFC 2396),則一般應該使用該方法而不是urlparse()。須要一個單獨的函數來分離路徑段和參數。這個函數返回5個(對比 urlparse沒有params)元素的元組:
(addressing scheme, network location, path, query, fragment identifier)