Как объединить абсолютные и относительные URL? - PullRequest
83 голосов
/ 22 ноября 2011

У меня есть два URL:

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

Как получить абсолютный URL для url2?

Ответы [ 5 ]

172 голосов
/ 22 ноября 2011

Вы должны использовать urlparse.urljoin :

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

С Python 3 (где urlparse переименовывается в urllib.parse ) вы можете использоватьэто как следует :

>>> import urllib.parse
>>> urllib.parse.urljoin(url1, url2)
'http://127.0.0.1/test1/test4/test6.xml'
6 голосов
/ 21 января 2014
es = ['http://127.0.0.1', 'test1', 'test4', 'test6.xml']
base = ''
map(lambda e: urlparse.urljoin(base, e), es)
4 голосов
/ 15 января 2014
>>> from urlparse import urljoin
>>> url1 = "http://www.youtube.com/user/khanacademy"
>>> url2 = "/user/khanacademy"
>>> urljoin(url1, url2)
'http://www.youtube.com/user/khanacademy'

Простой.

3 голосов
/ 16 января 2019

Если ваш относительный путь состоит из нескольких частей, вы должны объединить их отдельно, поскольку 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'

См. Также: Как объединить компоненты пути при создании URL-адреса в Python

0 голосов
/ 29 мая 2019

Для 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...