首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python - urlparse链接

Python - urlparse链接
EN

Stack Overflow用户
提问于 2017-08-29 16:42:18
回答 2查看 1.3K关注 0票数 0

我想在urls中添加方案,如果不存在。

代码语言:javascript
复制
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

当我没有任何端口号时,上面的代码工作得很好。当有端口号时,它会显示任意输出。例如:-

代码语言:javascript
复制
input go.com:8000/3/
output go.com://8000/3/

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

EN

回答 2

Stack Overflow用户

发布于 2017-08-29 17:20:05

如果您有端口号,但没有url方案,您的url必须以//开头。urlparse只有在“//”正确引入netloc时才能识别它。否则,假设输入是相对URL,并因此以路径组件开始。

检查以下代码,并观察其差异

1)在第一个示例中,我添加了//,以便解析器将其识别为netloc而不是方案,然后是路径。

代码语言:javascript
复制
p.urlparse('//go.com:8000/3/')
ParseResult(scheme='', netloc='go.com:8000', path='/3/', params='', query='', fragment='')

2)在这个示例中,我们没有模式,也没有指定//,也没有端口号,所以整个url都被认为是路径。

代码语言:javascript
复制
p.urlparse('go.com/3/')
ParseResult(scheme='', netloc='', path='go.com/3/', params='', query='', fragment='')

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

代码语言:javascript
复制
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]

票数 1
EN

Stack Overflow用户

发布于 2017-08-29 16:55:14

根据文档,您需要正确引入netloc才能正确解析。因此,如果url不是绝对路径,请尝试在url的开头添加//,如下所示:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45934457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档