2017-08-29 27 views
0

如果不存在,我想在url中添加方案。Python - urlparse链接

import urlparse 

p = urlparse.urlparse(url) 
print p 
netloc = p.netloc or p.path 
path = p.path if p.netloc else '' 
scheme = p.scheme or 'http' 
p = urlparse.ParseResult(scheme, netloc, path, *p[3:]) 
url = p.geturl() 
print url 

上面的代码很好,当我没有任何端口号的情况下。当端口号存在时,它显示任意输出。对于如: -

input go.com:8000/3/ 
output go.com://8000/3/ 

也是一样的localhost。在这种情况下,我应该遵循什么方法?

回答

0

根据该文件,你需要正确地介绍netloc被正确解析。 因此,尝试在URL的开头添加//,如果它不是一个绝对路径,像:

urlparse.urlparse('//go.com:8000/3') 
ParseResult(scheme='', netloc='go.com:8000', path='/3', params='', query='', fragment='') 

这样,它正确地识别URL的各个部分。另请参阅文档:https://docs.python.org/2/library/urlparse.html#urlparse.urlparse

0

如果您有端口号并且没有url方案,则您的网址必须以//开头。 urlparse只有在通过'//'正确引入时才能识别netloc。否则,输入被假定为相对URL,因此以路径组件开始。

看看下面的代码,并观察之探源

1)在我已加入//使得解析器将其标识为netloc而非方案和然后是路径此第一样品。

p.urlparse('//go.com:8000/3/') 
ParseResult(scheme='', netloc='go.com:8000', path='/3/', params='', query='', fragment='') 

2)在本示例中,我们没有这个方案和力指定//和我们没有端口号,以便整个URL被认为是路径。

p.urlparse('go.com/3/') 
ParseResult(scheme='', netloc='', path='go.com/3/', params='', query='', fragment='') 

3)在这个例子中,我确实指定了端口。我们知道在该方案之后,我们有://解析器在之前识别:作为方案和之后:作为路径。

p.urlparse('go.com:8000/3/') 
ParseResult(scheme='go.com', netloc='', path='8000/3/', params='', query='', fragment='') 

这是urlparse如何解析url。为了让你的url方案起作用,请检查://如果你在你的url的前端找到明确的追加//然后工作就完成了。

有关更多详细信息,您可以访问此URL [https://docs.python.org/2/library/urlparse.html]