urlparse模塊主要是把url拆分為6部分,並返回元組。並且可以把拆分后的部分再組成一個url。主要有函數有urljoin、urlsplit、urlunsplit、urlparse等。
urlparse.urlparse(urlstring[, scheme[, allow_fragments]])
將urlstring解析成6個部分,它從urlstring中取得URL,並返回元組 (scheme, netloc, path, parameters, query, fragment),但是實際上是基於namedtuple,是tuple的子類。它支持通過名字屬性或者索引訪問的部分URL,每個組件是一串字符,也有可能是空的。組件不能被解析為更小的部分,%后面的也不會被解析,分割符號並不是解析結果的一部分,除非用斜線轉義,注意,返回的這個元組非常有用,例如可以用來確定網絡協議(HTTP、FTP等等 )、服務器地址、文件路徑,等等。如下圖所示
(1)引入urlparse模塊,這里只引入了urlparse方法,如果你想要用所有的方法,你需要import urlparse
from urlparse import urlparse
(2)我們將下面的url地址進行拆解,將拆解的結果存放到parsed中.
parsed=urlparse('http://user:pass@Netloc:80/path;parameters?query=argument#fragment')
(3)之后,我們通過parsed的各個屬性來訪問不同的部分
from urlparse import urlparse
parsed = urlparse('url地址')
print 'scheme :'+ parsed.scheme #網絡協議
print 'netloc :'+ parsed.netloc #服務器位置(也可呢能有用戶信息)
print 'path :'+ parsed.path #網頁文件在服務器中存放的位置
print 'params :'+ parsed.params #可選參數
print 'query :'+ parsed.query #連接符(&)連接鍵值對
print 'fragment:'+ parsed.fragment #拆分文檔中的特殊貓
print 'username:'+ parsed.username #用戶名
print 'password:'+ parsed.password #密碼
print 'hostname:'+ parsed.hostname #服務器名稱或者地址
print 'port :', parsed.port #端口(默認是80
>>> import urlparse
>>> url=urlparse.urlparse('http://www.baidu.com/index.php?username=guol')
>>> print url
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.php', params='', query='username=guol', fragment='')
>>> print url.netloc
www.baidu.com
>>>
urlparse.urlunparse(parts)
從一個元組構建一個url,元組類似urlparse返回的,它接收元組(scheme, netloc, path, parameters, query, fragment)后,會重新組成一個具有正確格式的URL,以便供Python的其他HTML解析模塊使用。
>>> import urlparse
>>> url=urlparse.urlparse('http://www.baidu.com/index.php?username=guol')
>>> print url
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.php', params='', query='username=guol', fragment='')
>>> u=urlparse.urlunparse(url)
>>> print u
http://www.baidu.com/index.php?username=guol
urlparse.urlsplit(urlstring[, scheme[, allow_fragments]])
主要是分析urlstring,返回一個包含5個字符串項目的元組:協議、位置、路徑、查詢、片段。allow_fragments為False時,該元組的組后一個項目總是空,不管urlstring有沒有片段,省略項目的也是空。urlsplit()和urlparse()差不多。不過它不切分URL的參數。
urlparse.urlunsplit(parts)
>>> import urlparse
>>> url=urlparse.urlparse('http://www.baidu.com/index.php?username=guol')
>>> print url
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.php', params='', query='username=guol', fragment='')
>>> url=urlparse.urlsplit('http://www.baidu.com/index.php?username=guol')
>>> print url
SplitResult(scheme='http', netloc='www.baidu.com', path='/index.php', query='username=guol', fragment='')
urlunsplit使用urlsplit()返回的值組合成一個url
urlparse.urljoin(base, url[, allow_fragments])
urljoin主要是拼接URL,它以base作為其基地址,然后與url中的相對地址相結合組成一個絕對URL地址。函數urljoin在通過為URL基地址附加新的文件名的方式來處理同一位置處的若干文件的時候格外有用。需要注意的是,如果基地址並非以字符/結尾的話,那么URL基地址最右邊部分就會被這個相對路徑所替換。如果希望在該路徑中保留末端目錄,應確保URL基地址以字符/結尾。
>>> import urlparse
>>> urlparse.urljoin('http://www.oschina.com/tieba','index.php')
'http://www.oschina.com/index.php'
>>> urlparse.urljoin('http://www.oschina.com/tieba/','index.php')
'http://www.oschina.com/tieba/index.php'