【发布时间】:2011-09-14 18:11:12
【问题描述】:
我需要解析一个 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 识别 netloc 只有当它被正确地引入 '//'。否则假定输入 成为一个相对 URL 并因此开始 带有路径组件。
所以,这是故意的。但是,我仍然不知道如何从该 URL 获取 netloc。
我想我可以检查该方案是否存在,如果不存在,则添加它,然后解析它。但这个解决方案似乎不太好。
你有更好的主意吗?
编辑: 感谢所有的答案。但是,我不能做 Corey 和其他人提出的“startswith”事情。因为,如果我得到一个带有其他协议/方案的 URL,我会把它搞砸。见:
如果我得到这个网址:
ftp://something.com
使用建议的代码,我会在开头添加“http://”,然后会搞砸。
我找到的解决方案
if not urlparse.urlparse(url).scheme:
url = "http://"+url
return urlparse.urlparse(url)
注意事项:
我先做一些验证,如果没有给出方案,我认为它是 http://
【问题讨论】:
-
这是因为 URL 的协议部分 -
http://- 丢失了吗? -
是的,就是这个原因。但是,如果计划仍然缺失,我怎么能得到它?
-
在您的解决方案中,我仍然会检查前导
//(可能只是/),因为正确的 url 会包含它(即使缺少方案) -
@TokenMacGuy 我这样做。它在“验证”部分。值得一提。检查史蒂夫的答案。
-
现在,如果您在解决方案中提供了自我回答,您也可能会为此获得一些支持。 (或者您是否希望其他人发布您的答案,或者完全是其他内容?)
标签: python url url-parsing urlparse