将完整的URL分成几部分

时间:2016-05-23 15:10:11

标签: python regex

我正在尝试将网址分成几部分,以便我可以单独使用它们。

例如网址:

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

我如何将其拆分为: 1)源/源(即协议+子域+域) 2)路径'/ api / addresses' 3)查询:'?postcode = XXSDF& houseNo = 34'

3 个答案:

答案 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,但是它会在不难将这些碎片重新组合在一起。