web-dev-qa-db-ja.com

絶対URLと相対URLを結合する方法は?

2つのURLがあります。

url1 = "http://127.0.0.1/test1/test2/test3/test5.xml"
url2 = "../../test4/test6.xml"

Url2の絶対URLを取得するにはどうすればよいですか?

85
Bdfy

rlparse.urljoin を使用する必要があります。

>>> import urlparse
>>> urlparse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'

Python 3(ここで rlparseはurllib.parseに名前が変更されます )で 次のように使用

>>> import urllib.parse
>>> urllib.parse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'
180
Cédric Julien
es = ['http://127.0.0.1', 'test1', 'test4', 'test6.xml']
base = ''
map(lambda e: urlparse.urljoin(base, e), es)
6
Shikhar Mall
>>> from urlparse import urljoin
>>> url1 = "http://www.youtube.com/user/khanacademy"
>>> url2 = "/user/khanacademy"
>>> urljoin(url1, url2)
'http://www.youtube.com/user/khanacademy'

シンプル。

4
Talha Ashraf

相対パスが複数の部分で構成されている場合は、urljoinが相対パスを置き換え、結合しないため、それらを個別に結合する必要があります。これを行う最も簡単な方法は、posixpathを使用することです。

>>> import urllib.parse
>>> import posixpath
>>> url1 = "http://127.0.0.1"
>>> url2 = "test1"
>>> url3 = "test2"
>>> url4 = "test3"
>>> url5 = "test5.xml"
>>> url_path = posixpath.join(url2, url3, url4, url5)
>>> urllib.parse.urljoin(url1, url_path)
'http://127.0.0.1/test1/test2/test3/test5.xml'

参照: PythonでURLを構築するときにパスのコンポーネントを結合する方法

3
pcv

python 3.0+の場合、URLを結合する正しい方法は次のとおりです。

from urllib.parse import urljoin
urljoin('https://10.66.0.200/', '/api/org')
# output : 'https://10.66.0.200/api/org'
0
srth12