我正在尝试将网址分成几部分,以便我可以单独使用它们。
例如网址:
'https://api.somedomain.co.uk/api/addresses?postcode=XXSDF&houseNo=34'
我如何将其拆分为: 1)源/源(即协议+子域+域) 2)路径'/ api / addresses' 3)查询:'?postcode = XXSDF& houseNo = 34'
答案 0 :(得分: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'
答案 1 :(得分:1)
在Python3中的urlparse
中找到的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
:
如果需要将更新的URL语法允许将参数应用于URL的路径部分的每个段(请参阅RFC 2396),则通常应使用此代替urlparse(https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlsplit)
答案 2 :(得分:0)
你可能想要在Python 2上使用stdlib模块urlparse
,或在Python 3上使用urllib.parse
。这会比你要求的更好地分割URL,但是它会在不难将这些碎片重新组合在一起。