我需要解析一个URL。我目前使用urlparse.urlparse()和urlparse.urlsplit()。如何在需要时将“http://”协议预先添加到网址中?
问题是,当它不存在该方案时,我无法从URL获取“netloc”(主机)。 我的意思是,如果我有以下网址:
www.amazon.com/Programming-Python-Mark-Lutz/dp/0596158106/ref=sr_1_1?ie=UTF8 & QID = 1308060974 & SR = 8 -1
我不能让netloc:www.amazon.com
据python文档:
继语法规范 RFC 1808,urlparse只有在通过 '//'正确引入网址时才会识别netloc 。否则,输入推测为 是一个相对URL,因此用路径组件启动 。
所以,这是故意的。但是,我仍然不知道如何从该URL获取网络地址。
我想我可以检查该方案是否存在,如果不存在,则添加它,然后解析它。但是这个解决方案看起来不太好。
你有更好的主意吗?
编辑: 感谢您的所有答案。但是,我不能做科里和其他人提出的“开始”事情。 Becouse,如果我得到一个URL与其他协议/计划我会搞砸了。请参阅:
如果我得到这个网址:
ftp://something.com
拟议我想补充的“http://”的代码开始,并会搞砸了。
的解决方案,我发现
if not urlparse.urlparse(url).scheme:
url = "http://"+url
return urlparse.urlparse(url)
一些需要注意的:
我做一些验证第一,如果没有方法给出我认为这是http://
是这是因为URL的协议部分 - “http://” - 缺失? – ewall 2011-06-14 14:22:34
是的,这就是原因。但是,如果计划仍然失踪,我怎么能得到它? – santiagobasulto 2011-06-14 14:24:31
在你的解决方案中,我仍然检查领先的''/''(可能只是'/'),因为一个合适的url会有这个(即使这个方案丢失) – SingleNegationElimination 2011-06-24 17:26:31