Сообщить об ошибке.

Функция urljoin() модуля urllib.parse в Python

Объединяет базовый URL-адрес и относительную части пути URL-адреса

Синтаксис:

import urllib.parse

urllib.parse.urljoin(base, url, allow_fragments=True)

Параметры:

  • base - базовый URL-адрес,
  • url - относительная часть пути URL-адреса,
  • allow_fragments=True - как поступать с фрагментами якорей на HTML страницу.

Возвращаемое значение:

  • абсолютный URL-адрес в виде строки.

Описание:

Функция urljoin() модуля urllib.parse строит полный абсолютный URL-адрес путем объединения базового base URL-адреса с относительной частью пути адреса url.

Неофициально при этом используются компоненты базового URL-адреса, в частности схема адресации, сетевое расположение и путь/часть пути, чтобы обеспечить недостающие компоненты в относительном URL-адресе.

Например:

>>> from urllib.parse import urljoin
>>> base_url = urljoin('https://docs-python.ru/', '/tutorial/')
>>> base_url
# 'https://docs-python.ru/tutorial/'

# Обратите внимание на поведение функции при наличии
# косой черты вначале аргумента 'url' и без нее...
# Без косой черты вначале аргумента 'url'
# URL-адрес дополняется!
>>> urljoin(base_url, 'klassy-jazyke-python/') 
# 'https://docs-python.ru/tutorial/klassy-jazyke-python/'

# при наличии косой черты вначале аргумента 'url'
# URL-адрес заменяется! от домена
>>> urljoin(base_url, '/standart-library/modul-cmd-python/')
# ''https://docs-python.ru/standart-library/modul-cmd-python/''

Если аргумент allow_fragments равен False, то идентификаторы фрагментов не распознаются (якорей на HTML странице типа #anchor). Вместо этого они анализируются как часть пути, параметров или компонента запроса. Дополнительно по этому параметру смотрите функцию urllib.parse.urlsplit() .

Примечание. Если аргумент url является абсолютным URL-адресом (то есть начинается с '//' или 'scheme://'), то в результате будет заменен весь URL-адрес. Например:

>>> urljoin('https://docs-python.ru/tutorial/', '//docs.python.org/3/library/')
# 'https://docs.python.org/3/library/'

Если такое поведение не нужно, то предварительно обработайте URL-адрес с помощью функций urllib.parse.urlsplit() и urllib.parse.urlunsplit(), удалив возможные части scheme и netloc.