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

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

Создает URL-адрес из пяти элементов последовательности.

Синтаксис:

import urllib.parse

urllib.parse.urlunsplit(parts)

Параметры:

  • parts - части URL-адреса

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

Описание:

Функция urlunsplit() модуля urllib.parse создает полный URL-адрес в виде строки путем объединения элементов кортежа, возвращаемого функцией urllib.parse.urlsplit().

Аргумент parts может быть любой последовательностью из пяти элементов, которая поддерживает итерацию.

Результат работы функции urllib.parse.urlunsplit() может привести к немного отличающемуся, но эквивалентному URL-адресу, если URL-адрес, проанализированный изначально, имел ненужные разделители (например, '?' с пустыми параметрами).

Примеры использования функции urllib.parse.urlunsplit():

Для примера соберем из отдельных компонентов строку URL:

'https://docs-python.ru/search/?text=isinstance&web=0'.

В документации сказано, что функция поддерживает любую последовательность из пяти элементов, которая поддерживает итерацию. Следовательно для этой цели подойдет список.

Для начала получим нужный список с пятью элементами. Так как начальное значение URL всегда известно, то будем получать список при помощи функции urllib.parse.urlsplit().

>>> import urllib.parse
>>> base_url = 'https://docs-python.ru/'
>>> url_parts = list(urllib.parse.urlsplit(base_url))
>>> url_parts
# ['https', 'docs-python.ru', '/', '', '']

Такие параметры URL как text=isinstance&web=0 нужно как то собрать и передать в список по индексу base_url[3]. Для этих целей есть функция urllib.parse.urlencode(), которая закодирует и соберет правильным образом параметры запроса, представленные в качестве словаря.

>>> import urllib.parse
>>> args = {'text'='isinstance', 'web'=0}
>>> query = urllib.parse.urlencode(args)
>>> query
# 'text=isinstance&web=0'

Теперь осталось все компоненты URL передать в список и собрать URL-адрес при помощи функции urllib.parse.urlunsplit().

# получено выше
>>> url_parts = ['https', 'docs-python.ru', '/', '', '']
>>> path = '/search/'
# получено выше
>>> query = 'text=isinstance&web=0'
# Добавляем компоненты в список
>>> url_parts[2] = path
>>> url_parts[3] = query
>>> url_parts
# ['https', 'docs-python.ru', '/search/', 'text=isinstance&web=0', '']

# подставляем список в качестве аргумента в функцию
>>> urllib.parse.urlunsplit(url_parts)
# 'https://docs-python.ru/search/?text=isinstance&web=0'

Теперь оформим вышесказанное в функцию build_url(), которая будет строить URL-адреса из отдельных компонентов.

>>> import urllib.parse
>>> def build_url(base_url, path, query_dict=None, anchor=None):
...     url_parts = list(urllib.parse.urlsplit(base_url))
...     url_parts[2] = path
...     url_parts[3] = urllib.parse.urlencode(query_dict) if query_dict ``
...     url_parts[4] = anchor if anchor ''
...     return urllib.parse.urlunsplit(url_parts)
...
>>> query_dict = {'text': 'isinstance', 'web': '0'}
# работает со сценарием двойной косой черты
>>> build_url('https://docs-python.ru/', '/search/', query_dict)
# 'https://docs-python.ru/search/?text=isinstance&web=0'

# работает без косой черты
>>> build_url('https://docs-python.ru', 'search/', query_dict)
# 'https://docs-python.ru/search/?text=isinstance&web=0'

Для полноценности, в этой функции построения URL-адреса из отдельных компонентов необходимо предусмотреть проверку передаваемых типов.