Python urlparse.urlparse返回3'/';而不是2后方案

Python urlparse.urlparse返回3'/';而不是2后方案,python,urlparse,Python,Urlparse,如果缺少“http”方案名称,我想在给定url字符串前面添加它。否则,请不要使用url,这样我认为URLPRASE是正确的方法。但是,每当没有方案并且我使用get url时,我就会在方案和域之间获取//,而不是“//” >>> t = urlparse.urlparse('www.example.com', 'http') >>> t.geturl() 'http:///www.example.com' # three /// 如何转换此url,使其看起来像

如果缺少“http”方案名称,我想在给定url字符串前面添加它。否则,请不要使用url,这样我认为URLPRASE是正确的方法。但是,每当没有方案并且我使用get url时,我就会在方案和域之间获取//,而不是“//”

>>> t = urlparse.urlparse('www.example.com', 'http')
>>> t.geturl()
'http:///www.example.com' # three ///
如何转换此url,使其看起来像:

'http://www.example.com' # two //
简短的回答(但有点重复):

在示例代码中,主机名被解析为路径而不是网络位置:

>>> 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='')

如果您想按预期使用urlparse,最接近的“正确”等价物是使用“//www.example.com”作为urlstring。这样的urlstring毫无疑问是一个没有方案的绝对路径,因此您可以提供“http”作为默认方案。我想您可以通过检测URL是否包含字符串“/”,如果不包含,则在前面加上“/”。

我明白了。我的印象是,url解析将巧妙地确定方案的不足,并更好地重建方案。通过简单地检查url字符串是否以“http://”开头并相应地附加它来修复它。@Dan Holman我也期望如此,但如果你仔细想想,你就不会真的期望如此。因为“images/tick.png”指的是相对路径,而不是完整的URL。urlparse如何区分它和“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='')