繼續學習python的web模塊,urlparse 是一個比較簡單的模塊,主要是用來 解析URL字符串的php
1 urlparse簡介html
python使用urlparse來解析URL字符串 python
主要方法: urlpraseweb
次要方法: urljoin urlsplit urlunsplit等服務器
2 urlparse詳解網絡
urlparse模塊主要是把url拆分爲6部分,並返回元組。而且能夠把拆分後的部分再組成一個url。主要有函數有urljoin、urlsplit、urlunsplit、urlparse等。ide
URL格式包含:函數
協議://用戶名@密碼:子域名.域名.頂級域名:端口/目錄/文件名.文件後綴?參數=值#標誌
2.1 urlparse學習
urlparse.urlparse(urlstring[,scheme[, allow_fragments]]) 可選參數: scheme – 主要是用來 爲不包含些一部分的URL指定默認協議,此參數的默認值爲空字符串 allow_fragments 用來指示是否能夠對地址進行分片,此參數的默認值爲 True
將urlstring解析成6個部分,它從urlstring中取得URL,並返回元組 (scheme, netloc, path, parameters,query, fragment),可是其實是基於namedtuple,是tuple的子類。它支持經過名字屬性或者索引訪問的部分URL,每一個組件是一串字符,也有多是空的。組件不能被解析爲更小的部分,%後面的也不會被解析,分割符號並非解析結果的一部分,除非用斜線轉義,注意,返回的這個元組很是有用,例如能夠用來肯定網絡協議(HTTP、FTP等等 )、服務器地址、文件路徑,等等。url
urlparse方法返回對象中的屬性:
屬性 |
索引值 | 值含義 | 默認值 | 備註 |
scheme | 0 | 協議 | 空字符串 |
|
netloc | 1 | 服務器地址 | 空字符串 | |
path | 2 | 路徑 | 空字符串 | |
parameters | 3 | 參數 | 空字符串 | |
query | 4 | 查詢部分 | 空字符串 | |
fragment | 5 | 分片部分 | 空字符串 | |
username | 用戶名 | None | ||
password | 密碼 | None | ||
hostname | 主機名 | None | ||
port | 端口 | None |
附代碼:
>>> import urlparse >>> url=urlparse.urlparse('http://www.baidu.com/index.php?username=51cto') >>> url ParseResult(scheme='http',netloc='www.baidu.com', path='/index.php', params='', query='username=51cto ', fragment='') >>> url.scheme 'http' >>> url.netloc 'www.baidu.com' >>> url.path '/index.php' >>> url.params '' >>> url.query 'username=51cto' >>> url.fragment '' >>> url.geturl() 'http://www.baidu.com/index.php?username=51cto' >>> url ParseResult(scheme='http', netloc='', path='www.baidu.com/index.php',params='', query='username=51cto ', fragment='') #備註:當URL 中不存在 http的時候,會自動使用此參數
2.2 urljoin
urlparse.urljoin(base,url[, allow_fragments])
urljoin主要是拼接URL,它以base做爲其基地址,而後與url中的相對地址相結合組成一個絕對URL地址。函數urljoin在經過爲URL基地址附加新的文件名的方式來處理同一位置處的若干文件的時候格外有用。須要注意的是,若是基地址並不是以字符/結尾的話,那麼URL基地址最右邊部分就會被這個相對路徑所替換。若是但願在該路徑中保留末端目錄,應確保URL基地址以字符/結尾。
附代碼:
>>>url=urlparse.urljoin('http://www.baidu.com','index.html') >>> url 'http://www.baidu.com/index.html'
因爲對輸入的參數沒有限制,因此須要注意:
2.2.1 當輸入的參數都是空字符串的時候,返回的拼合url也是空字符串
附代碼:
>>> url = urlparse.urljoin('','') >>> url ''
2.2.2 在相對url中若是有協議字段,則優先使用相對url中的協議,不然使用絕對url中的協議字段
附代碼:
>>> url = urlparse.urljoin('http://www.baidu.com','ftp://www.baidu.com/index.html') >>> url 'ftp://www.baidu.com/index.html' >>> url = urlparse.urljoin('http://www.baidu.com','www.baidu.com/index.html') >>> url 'http://www.baidu.com/www.baidu.com/index.html'
當相對字符串中不包含協議的時候,就會將全部的字符串認爲是一個路徑信息,從而忙字符串的值和絕對url的值結合了起來
2.2.3 當絕對url和相對url中都含有服務器地址且不相同的時候,將採用相對url地址的服務器地址和路徑
附代碼:
>>> url = urlparse.urljoin('http://www.baidu.com','http://www.baidu.com/index.html') >>> url 'http://www.baidu.com/index.html'
2.3 urlsplit
urlparse.urlsplit(urlstring[,scheme[, allow_fragments]])
主要是分析urlstring,返回一個包含5個字符串項目的元組:協議、位置、路徑、查詢、片斷。allow_fragments爲False時,該元組的組後一個項目老是空,無論urlstring有沒有片斷,省略項目的也是空。urlsplit()和urlparse()差很少。不過它不切分URL的參數。適用於遵循RFC2396的URL,每一個路徑段都支持參數。這樣返回的元組就只有5個元素。
附代碼:
>>> url = urlparse.urlsplit('http://www.baidu.com:80/index.html?src=fie') >>> url SplitResult(scheme='http',netloc='www.baidu.com:80', path='/index.html', query='src=fie', fragment='') >>> url = urlparse.urlparse('http://www.baidu.com:80/index.html?src=fie') >>> url ParseResult(scheme='http',netloc='www.baidu.com:80', path='/index.html', params='', query='src=fie',fragment='')
2.4 urlunsplit
urlparse.urlunsplit(parts)
urlunsplit使用urlsplit()返回的值組合成一個url
附代碼:
>>> url = urlparse.urlsplit('http://www.baidu.com:80/index.html?src=fie') >>> url SplitResult(scheme='http',netloc='www.baidu.com:80', path='/index.html', query='src=fie', fragment='') >>> url=urlparse.urlunsplit(('http','www.baidu.com:80','/index.html','src=fie','')) >>> url 'http://www.baidu.com:80/index.html?src=fie'
2.4 urlunparse
urlparse.urlunparse(parts)
從一個元組構建一個url,元組相似urlparse返回的,它接收元組(scheme, netloc, path, parameters, query, fragment)後,會從新組成一個具備正確格式的URL,以便供Python的其餘HTML解析模塊使用。
>>> url =urlparse.urlparse('http://www.baidu.com:80/index.html?src=fie') >>> url ParseResult(scheme='http', netloc='www.baidu.com:80',path='/index.html', params='', query='src=fie', fragment='') >>> url = urlparse.urlunparse(url) >>> url 'http://www.baidu.com:80/index.html?src=fie'
未完,待續。。。