我想把一个URL分割成三个字符串。示例:
https://www.google.com:443
http://amazon.com:467我希望产出如下:
string 1: https or http
string 2: www.google.com or amazon.com
string 3: 443 or 467上述输出基于所提供的示例。基本上,我希望将字符串拆分为protocol、domain和port,并分配给三个不同的变量。
发布于 2019-07-17 03:02:50
ULR比人们想象的要复杂得多,这就是为什么通常使用经过验证的代码来解析它们并处理意外的边缘情况是一个好主意。Python的库中有urllib.parse,您应该使用它,而不是试图解析它。
您想要的部分在从scheme返回的对象的hostname和port属性中。
例如:
from urllib.parse import urlparse
def getParts(url_string):
p = urlparse(url_string)
return [p.scheme, p.hostname, p.port]
getParts('https://www.google.com:443')
# ['https', 'www.google.com', 443]
getParts('http://amazon.com:467')
# ['http', 'amazon.com', 467]
# surprising, but valid url:
getParts('https://en.wikipedia.org:443/wiki/Template:Welcome')
# ['https', 'en.wikipedia.org', 443]
# missing parts:
getParts('//www.google.com/example/home')
# ['', 'www.google.com', None]发布于 2019-07-17 02:32:45
给你:
url = 'https://www.google.com:443'
first = url.find(':')
last = url.rfind(':')
protocol = url[:first]
domain = url[first+3:last]
port = url[last+1:]发布于 2019-07-17 03:15:13
一种“原始”方法:
from collections import namedtuple
def split_url(url):
split_1 = url.split('://')
split_2 = split_1[1].split(':')
protocol = split_1[0]
domain = split_2[0]
port = split_2[1]
url_split = namedtuple('url_split', ['protocol', 'domain', 'port'])
return url_split(protocol, domain, port)因此,例如:
s = 'https://www.google.com:443'
result = split_url(s)然后我们有:
result.protocol
>> 'https'
result.domain
>> 'www.google.com'
result.port
>> '443'https://stackoverflow.com/questions/57067736
复制相似问题