2016-05-23 60 views
-2

我試圖將網址拆分爲多個部分,以便我可以單獨使用這些網址。將整個網址分解成部分

例如,的網址:

'https://api.somedomain.co.uk/api/addresses?postcode=XXSDF&houseNo=34'

如何可以分成這樣: 1)源極/原點(即協議+子域+結構域) 2)路徑 '/ API /地址' 3)的查詢:「 ?郵編= XXSDF &的HouseNo = 34'

回答

1

urlparse庫,在Python3在urllib發現,是專爲這一點。改編自documentation例如:

>>> from urllib.parse import urlparse 
>>> o = urlparse('https://api.somedomain.co.uk/api/addresses?postcode=XXSDF&houseNo=34') 
>>> o 
ParseResult(scheme='https', netloc='api.somedomain.co.uk', path='/api/addresses', params='', query='postcode=XXSDF&houseNo=34', fragment='') 
>>> o.scheme 
'http' 
>>> o.port 
None 
>>> o.geturl() 
'https://api.somedomain.co.uk/api/addresses?postcode=XXSDF&houseNo=34' 

爲了獲取主機,路徑和查詢,API是簡單明瞭:

>>> print(o.hostname, o.path, o.query) 

返回:

api.somedomain.co.uk /api/addresses postcode=XXSDF&houseNo=34 

爲了得到子域本身,the only way seems to split by .


注意,urllib.parse.urlsplit應該使用urlparse,根據文檔:

這應該通常被用來代替裏urlparse(https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlsplit)如果要施加的更近的URL語法允許參數到URL的路徑部分的每個部分(請參閱RFC 2396)是想要

+0

謝謝 - 我愛如何python有一個工具的一切。 – Yunti

0

你可能想在STDLIB模塊urlparse關於Python 2,或urllib.parse關於Python 3.將會達到更精細的比你要求拆分URL,但它並不難再次將這些碎片重新放在一起。

2

你可以使用python的urlparse。

>>> from urlparse 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'