首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中规范化URL

如何在python中规范化URL
EN

Stack Overflow用户
提问于 2008-09-23 13:23:50
回答 7查看 68.7K关注 0票数 74

我想知道我是否在python中规范化了一个URL。

例如,如果我有一个url字符串:“bar.html goo/http://www.example.com/foo

我需要一个python库,它可以将额外的空格(或任何其他非规范化字符)转换为正确的URL。

EN

回答 7

Stack Overflow用户

发布于 2008-09-23 13:33:07

看看这个模块:werkzeug.utils。(现在在werkzeug.urls中)

您要查找的函数名为"url_fix“,其工作原理如下:

代码语言:javascript
复制
>>> from werkzeug.urls import url_fix
>>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)')
'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'

它在Werkzeug中的实现如下:

代码语言:javascript
复制
import urllib
import urlparse

def url_fix(s, charset='utf-8'):
    """Sometimes you get an URL by a user that just isn't a real
    URL because it contains unsafe characters like ' ' and so on.  This
    function can fix some of the problems in a similar way browsers
    handle data entered by the user:

    >>> url_fix(u'http://de.wikipedia.org/wiki/Elf (Begriffsklärung)')
    'http://de.wikipedia.org/wiki/Elf%20%28Begriffskl%C3%A4rung%29'

    :param charset: The target charset for the URL if the url was
                    given as unicode string.
    """
    if isinstance(s, unicode):
        s = s.encode(charset, 'ignore')
    scheme, netloc, path, qs, anchor = urlparse.urlsplit(s)
    path = urllib.quote(path, '/%')
    qs = urllib.quote_plus(qs, ':&=')
    return urlparse.urlunsplit((scheme, netloc, path, qs, anchor))
票数 74
EN

Stack Overflow用户

发布于 2009-05-10 16:15:41

Real fix in Python 2.7 for that problem

正确的解决方案是:

代码语言:javascript
复制
 # percent encode url, fixing lame server errors for e.g, like space
 # within url paths.
 fullurl = quote(fullurl, safe="%/:=&?~#+!$,;'@()*[]")

有关更多信息,请参阅Issue918368: "urllib doesn't correct server returned urls"

票数 58
EN

Stack Overflow用户

发布于 2009-06-07 16:35:25

因为这个页面是Google搜索该主题的最高结果,所以我认为值得一提的是使用Python在URL规范化方面所做的一些工作,这些工作超出了URL编码空格字符的范围。例如,处理默认端口、字符大小写、缺少尾随斜杠等。

在开发Atom联合格式时,有一些关于如何将URL规范化为规范格式的讨论;这在Atom/Pie wiki上的文章PaceCanonicalIds中有记录。这篇文章提供了一些很好的测试用例。

我相信这次讨论的一个结果是Mark Nottingham的urlnorm.py库,我已经在几个项目中使用了它,并取得了良好的效果。然而,该脚本不能与这个问题中给出的URL一起工作。因此,更好的选择可能是Sam Ruby's version of urlnorm.py,它处理该URL,以及来自Atom wiki的所有上述测试用例。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/120951

复制
相关文章

相似问题

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