urlparse 库中的 urljoin 问题改进

刚发现个问题,合并URL时的问题。
一直以来我们都用urlparse.urljoin来合并2个URL.但是
问题来了..
看下面的例子.

import urlparse
base='http://blog.xgarden.net/'
url='../../test/index.html'
urlparse.urljoin(base,url)

结果如下:

http://blog.xgarden.net/../../test/index.html

悲剧的../../依旧在其中。
但是在浏览器会自动的进行转换为

http://blog.xgarden.net/test/index.html

而其他的就不会了,比如wget等.
上代码解决之.

import urlparse,os.path
def urljoin(base,url):
    join = urlparse.urljoin(base,url)
    url = urlparse.urlsplit(join)
    path = os.path.normpath(url.path)
    return urlparse.urlunsplit((url.scheme,url.netloc,path,url.query,url.fragment))

现在运行下看看:

import urlparse
base='http://blog.xgarden.net/'
url='../../test/index.html'
print urljoin(base,url)
http://blog.xgarden.net/test/index.html

搞定

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。