urlparse.urlparse返回3个'/'而不是2个

9 投票
2 回答
1708 浏览
提问于 2025-04-17 01:17

我想在一个网址字符串前面加上'http'这个前缀,如果它本来就没有的话。如果网址已经有前缀了,就不动它。我觉得用urlparse这个工具可以做到。但是每当网址没有前缀时,我用get url的时候,得到的结果是///,而不是'//',这个'//'应该是在前缀和域名之间的。

>>> t = urlparse.urlparse('www.example.com', 'http')
>>> t.geturl()
'http:///www.example.com' # three ///

我该怎么把这个网址转换成看起来像这样:

'http://www.example.com' # two //

2 个回答

2

如果你想像之前那样使用urlparse,最接近“正确”的做法是把"urlstring"写成"//www.example.com"。这样的urlstring是一个明确的绝对路径,但没有指定协议,所以你可以把"http"当作默认的协议。我想你可以通过检查你的URL里是否包含"//"这个字符串,如果没有的话,就在前面加上"//"来实现这个功能。

6

简短的回答(不过有点自说自话):

>>> urlparse.urlparse("http://www.example.com").geturl()
'http://www.example.com'

在你的示例代码中,主机名被解析成了一个路径,而不是一个网络位置:

>>> urlparse.urlparse("www.example.com/go")
ParseResult(scheme='', netloc='', path='www.example.com/go', params='', \
    query='', fragment='')

>>> urlparse.urlparse("http://www.example.com/go")
ParseResult(scheme='http', netloc='www.example.com', path='/go', params='', \
    query='', fragment='')

撰写回答