7

我正在写一些东西来“清理”一个 URL。在这种情况下,我要做的就是返回一个伪造的方案,因为urlopen没有它就行不通。但是,如果我用它测试www.python.org它会返回http:///www.python.org。有谁知道为什么会有额外的 /,有没有办法在没有它的情况下返回它?

def FixScheme(website):

   from urlparse import urlparse, urlunparse

   scheme, netloc, path, params, query, fragment = urlparse(website)

   if scheme == '':
       return urlunparse(('http', netloc, path, params, query, fragment))
   else:
       return website
4

2 回答 2

9

问题是在解析非常不完整的 URLwww.python.org时,您提供的字符串实际上被视为pathURL 的组成部分,其中netloc(网络位置)和方案一样为空。对于默认方案,您实际上可以将第二个参数传递schemeurlparse(简化您的逻辑),但这对“空 netloc”问题没有帮助。所以你需要一些逻辑来解决这种情况,例如

if not netloc:
    netloc, path = path, ''
于 2010-09-26T14:55:10.697 回答
1

这是因为 urlparse 不是将“www.python.org”解释为主机名(netloc),而是解释为路径,就像浏览器在 href 属性中遇到该字符串时一样。然后 urlunparse 似乎专门解释了方案“http”。如果你把“x”作为方案,你会得到“x:www.python.org”。

我不知道您正在处理什么范围的输入,但看起来您可能不想要 urlparse 和 urlunparse。

于 2010-09-26T14:56:17.777 回答