Объединить базовый URL и путь с помощью urllib - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь объединить базовый URL url1 и относительный путь url2, используя Python 3 urllib.parse, но не получаю желаемого результата.Кроме того, я попытался использовать os.path.join (который не предназначен для этой цели) и простую конкатенацию строк с использованием .format():

import os.path
import urllib.parse

url1 = "www.sampleurl.tld"
url2 = "/some/path/here"


print(urllib.parse.urljoin(url1, url2))
# --> "/some/path/here"

print(os.path.join(url1, url2))
# --> "/some/path/here"

print("{}{}".format(url1, url2))
# --> "www.sampleurl.tld/some/path/here" (desired output)

Простая конкатенация строк возвращает желаемый абсолютный URL.Однако этот подход кажется очень наивным и не очень элегантным, поскольку он предполагает, что url2 начинается с /, что может быть не так.Конечно, я мог бы проверить это, вызвав url2.startswith('/') и изменив конкатенацию строк на "{}/{}".format(url1, url2), чтобы обеспечить желаемую гибкость, но я все еще задаюсь вопросом, как сделать это правильно с помощью urllib.parse.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019
import urllib.parse

url1 = 'www.sampleurl.tld'
url2 = '/some/path/here'

urlString = urllib.parse.ParseResult(scheme='https', netloc=url1, path=url2, params='', query='', fragment='')
urllib.parse.urlunparse(urlString) 

Вы можете попробовать это.URL-адрес создается не из списка, а из класса ParseResult.

0 голосов
/ 02 апреля 2019

urljoin ожидает, что первый аргумент baseurl будет включать схему.

Поэтому добавление https:// или http:// в этом отношении к вашей строке url1 должно сделать работу.

import urllib.parse

url1 = "https://www.sampleurl.tld"
url2 = "/some/path/here"


print(urllib.parse.urljoin(url1, url2))
# --> "https://www.sampleurl.tld/some/path/here"
...