url - 规范化/规范化 URL?

标签 url python-3.x normalization

我正在寻找一个库函数来规范化 Python 中的 URL,即删除路径中的“./”或“../”部分,或添加默认端口或转义特殊字符等。结果应该是指向同一网页的两个 URL 唯一的字符串。例如 http://google.comhttp://google.com:80/a/../应返回相同的结果。

我更喜欢 Python 3 并且已经浏览了 urllib模块。它提供了拆分 URL 的功能,但没有将它们规范化。 Java 有 URI.normalize()做类似事情的函数(尽管它不认为默认端口 80 等于没有给定端口),但是有没有类似的东西是 python?

最佳答案

这就是我使用的,到目前为止它一直有效。您可以从 pip 获取 urlnorm。

请注意,我对查询参数进行了排序。我发现这是必不可少的。

from urlparse import urlsplit, urlunsplit, parse_qsl
from urllib import urlencode
import urlnorm

def canonizeurl(url):
    split = urlsplit(urlnorm.norm(url))
    path = split[2].split(' ')[0]

    while path.startswith('/..'):
        path = path[3:]

    while path.endswith('%20'):
        path = path[:-3]

    qs = urlencode(sorted(parse_qsl(split.query)))
    return urlunsplit((split.scheme, split.netloc, path, qs, ''))

关于url - 规范化/规范化 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584861/

相关文章:

jQuery Mobile 在 URL 中传递参数

java - 在 JAX-RS 服务中获取 XML

symfony - 如何在 Symfony 路由中使用 anchor ?

python - python 中与本地和全局库的相对导入

Python 诅咒 : multiprocessing issue with Pool. map ?

machine-learning - 如何标准化数据以输入位于训练数据范围之外的神经网络?

url - PayPal 使用 GET 购买或捐赠表单 url

python - 如何在某些条件下禁用/启用特定的 tkinter 按钮?

nlp - 使用SVM时需要TF-IDF吗?

javascript - 通过 id 规范化对象数组和键