Python reports..compat.urljoin - добавьте метод доступа, если URL не содержит - PullRequest
0 голосов
/ 25 февраля 2019

Вот два способа, которыми я пытаюсь добавить https:// к URL.По какой-то причине метод urljoin дает странный вывод:

from requests.compat import urljoin

host = 'abc.def.com'
host2 = host

# brute-force string method
if not host.startswith('https://'):
    host = 'https://' + host  # Add schema
if host.endswith('/'):
    host = host[:-1]          # Strip /
print('Stringy way', host)

# nice library method? Doesn't quite work
print('urljoin    ', urljoin('https://', host2))

Вывод, который я вижу, со странными тремя символами ///,

Stringy way https://abc.def.com
urljoin     https:///abc.def.com

Я получаю бесполезные результаты си другие варианты:

print('urljoin #2 ', urljoin('https:/', host2))
print('urljoin #3 ', urljoin('https:', host2))
print('urljoin #4 ', urljoin('https', host2))

дает:

urljoin #2  https:///abc.def.com
urljoin #3  https:///abc.def.com
urljoin #4  abc.def.com

Это неправильная функция, используемая для этого?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете использовать urllib.parse.urlunsplit() для создания URL-адресов:

from urllib.parse import urlunsplit

print(urlunsplit(("https", "abc.def.com", "", "", "")))

Результат:

https://abc.def.com

В качестве входных данных принимается кортеж, соответствующий выходуurlsplit() со следующими атрибутами кортежа:

enter image description here

0 голосов
/ 25 февраля 2019

Функция urljoin обычно используется для присоединения якоря href к существующему URL.Пример:

from requests.compat import urljoin
url = 'https://abc.def.com'
href = '364'
urljoin(url, href)

Я получаю вывод: -

'https://abc.def.com/364'

Однако, если я хочу дополнить свой URL 'https://', я бы предпочел использовать: -

from requests.compat import urljoin
url = 'abc.def.com'
host = ('https://'+ url)
print(host)

И у меня есть вывод:

https://abc.def.com

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...