Python中的函数用于清理和标准化URL

nik*_*cub 4 python url

我使用URL作为键,所以我需要它们是一致的和干净的.我需要一个python函数,它将获取一个URL并清理它,以便我可以从数据库中获取.例如,它将采取以下措施:

example.com
example.com/
http://example.com/
http://example.com
http://example.com?
http://example.com/?
http://example.com//
Run Code Online (Sandbox Code Playgroud)

并输出一个干净的一致版本:

http://example.com/
Run Code Online (Sandbox Code Playgroud)

我浏览了std libs和github,找不到这样的东西

更新

我找不到一个Python库来实现这里和RFC中讨论的所有内容:

http://en.wikipedia.org/wiki/URL_normalization

所以我现在正在写一个.这比我最初设想的要多得多.

sam*_*ias 9

看看urlparse.urlparse().我用它取得了很大的成功.


注意:这个答案来自2011年,特定于Python2.在Python3中,urlparse模块已被命名为urllib.parse.相应的Python3文档urllib.parse可以在这里找到:

https://docs.python.org/3/library/urllib.parse.html

  • 从头开始 - 规范化在我 70% 以上的测试用例上失败(我现在有 50 个测试)。出于某种原因,python 社区反对按照 RFC 和浏览器处理它的方式实现规范化:http://en.wikipedia.org/wiki/URL_normalization 我发现了这个 python 错误:http://bugs.python.org/issue4191 (2认同)
  • 链接已经死了 (2认同)

duc*_*ucu 7

这是在scrapy中完成的:

http://nullege.com/codes/search/scrapy.utils.url.canonicalize_url

通过应用以下过程规范化给定的URL:

  • 首先按键,然后按值对查询参数进行排序
  • 百分比编码路径和查询参数.使用UTF-8(RFC-3986)对非ASCII字符进行百分比编码
  • 规范化所有空格(在查询参数中)'+'(加号)
  • 规范化百分比编码案例(%2f - >%2F)
  • 删除带有空值的查询参数(除非keep_blank_values为True)
  • 删除片段(除非keep_fragments为True)

  • 至少最近这些天,Scrapy从[w3lib程序包](http://w3lib.readthedocs.io/en/latest/w3lib.html#w3lib.url.canonicalize_url)导入了此功能。 (2认同)