import urllib.parse urllib.parse.urljoin(base, url, allow_fragments=True)
base
- базовый URL-адрес,url
- относительная часть пути URL-адреса,allow_fragments=True
- как поступать с фрагментами якорей на HTML страницу.Функция 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
.