Storm

Developed by Canonical Company ...

↑我也要推荐

urlparse 库中的 urljoin 问题改进

发布时间:2011-12-13 22:54:35, 关注:+622, 评论:+1, 赞美:+2, 不爽:+0

本文标签: urlparse

原始出处: 农夫花园

刚发现个问题,合并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

搞定

分享:urlparse 库中的 urljoin 问题改进

评论(1):urlparse 库中的 urljoin 问题改进

优异搜索 #

谢谢农夫花园。不过这个代码在mac和linux下没有问题。在windows下还需要该一下。 下面是适用于windows平台的代码。

”’
source
http://www.ueseo.org
http://docs.python.org/library/urlparse.html
http://www.coder4.com/archives/2674
http://blog.xgarden.net/?p=242
”’

from urlparse import urljoin
from urlparse import urlparse
from urlparse import urlunparse
from posixpath import normpath

def urljoinNew(base, url):
url1 = urljoin(base, url)
arr = urlparse(url1)
path = normpath(arr[2])
return urlunparse((arr.scheme, arr.netloc, path, arr.params, arr.query, arr.fragment))

if __name__ == “__main__”:

SourceURL=’http://www.ueseo.org/LinkValidatorTest.html’
#SourceURL=’http://www.ueseo.org/pagerank/history/’

url0=’../../index.html’
url1=’../index.html’

print urljoinNew(SourceURL,url0) #T
print urljoinNew(SourceURL,url1) #T

称呼(*)

网站

邮箱

右边是什么单词? python

# 建议上面的都填写,系统会自动记住的,且有头像和你的网站链接 (从 getavatar.com 获取头像)

Copyright© python.cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系,也与 python.cn 这个域名没有关系。

联系/投搞/留言: en.simple.is.better@gmail.com