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
.