Подтвердить что ты не робот

Python: путаницы с urljoin

Я пытаюсь сформировать URL-адреса из разных частей и не понимаю понимания поведения этого метода. Например:

Python 3.x

from urllib.parse import urljoin

>>> urljoin('some', 'thing')
'thing'
>>> urljoin('http://some', 'thing')
'http://some/thing'
>>> urljoin('http://some/more', 'thing')
'http://some/thing'
>>> urljoin('http://some/more/', 'thing') # just a tad / after 'more'
'http://some/more/thing'
urljoin('http://some/more/', '/thing')
'http://some/thing'

Можете ли вы объяснить точное поведение этого метода?

4b9b3361

Ответ 1

Лучший способ (для меня) подумать об этом - это первый аргумент, base - это как страница, на которой вы находитесь в своем браузере. Второй аргумент url - это href привязки на этой странице. Результатом является окончательный URL-адрес, к которому вы будете направлены, если вы нажмете.

>>> urljoin('some', 'thing')
'thing'

Это имеет смысл дать мое описание. Хотя можно надеяться, что база включает в себя схему и домен.

>>> urljoin('http://some', 'thing')
'http://some/thing'

Если вы находитесь на vhost some, и есть якорь, например <a href='thing'>Foo</a>, тогда ссылка приведет вас к http://some/thing

>>> urljoin('http://some/more', 'thing')
'http://some/thing'

Здесь мы находимся здесь some/more, поэтому относительная ссылка thing приведет нас к /some/thing

>>> urljoin('http://some/more/', 'thing') # just a tad / after 'more'
'http://some/more/thing'

Здесь мы не на some/more, мы находимся на some/more/, который отличается. Теперь наша относительная ссылка приведет нас к some/more/thing

>>> urljoin('http://some/more/', '/thing')
'http://some/thing'

И наконец. Если на some/more/ и href соответствует /thing, вы будете связаны с some/thing.