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