Pythonで相対URLを絶対URLに変換
・・・というのは見つかったのですが、
逆に、絶対URLを相対URLに変換は見つからないので書いてみました。
相対パスで書くとメンドクサイことが起こるとか、そういうのがあるのかもしれませんが、それはそれとして。
#encoding:shift-jis from __future__ import with_statement, division, print_function def relurl(target, base): from urlparse import urlparse, urlunparse import posixpath otarget = urlparse(target) obase = urlparse(base) if obase[:2] == otarget[:2]: path = posixpath.relpath(otarget[2], obase[2]) return urlunparse(("", "", path) + otarget[3:]) else: return target def main(): print(relurl("http://hc8.seikyou.ne.jp/home/doloop/mugen/tool/index.html", "http://hc8.seikyou.ne.jp/home/doloop/software/ie6")) # => "../../mugen/tool/index.html" print(relurl("http://doloop.bbs.fc2.com/", "http://hc8.seikyou.ne.jp/home/doloop/software/ie6")) # => "http://doloop.bbs.fc2.com/" print(relurl("http://hc8.seikyou.ne.jp/home/doloop/mugen/tool/index.html", "http://hc8.seikyou.ne.jp/home/doloop/software/ie6/index.html")) # => "../../../mugen/tool/index.html" # orz if __name__ == "__main__": main()
注:relurlのbase引数には、ディレクトリ名?を与えないとダメです。
HTMLのパスだと期待した結果が出ません。