我需要解析一个 URL。我目前正在使用 urlparse.urlparse() 和 urlparse.urlsplit()。
问题是当它不存在方案时,我无法从 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 只有当它被 '//' 正确引入时才能识别它。否则,输入被假定为相对 URL,因此以路径组件开始。
所以,这是故意的。但是,我仍然不知道如何从该 URL 获取 netloc。
我想我可以检查该方案是否存在,如果不存在,则添加它,然后解析它。但是这个解决方案似乎并不是很好。
你有更好的主意吗?
编辑: 感谢所有的答案。但是,我不能做 Corey 和其他人提出的“startswith”事情。因为,如果我得到一个带有其他协议/方案的 URL,我会把它搞砸。看:
如果我得到这个网址:
ftp://something.com
使用建议的代码,我将在开头添加“http://”并将其搞砸。
我找到的解决方案
if not urlparse.urlparse(url).scheme:
url = "http://"+url
return urlparse.urlparse(url)
需要注意的一点:
我先做一些验证,如果没有给出方案,我认为它是 http://