import urllib.parse
urllib.parse.urlunparse(parts)
parts
- компоненты URL-адресаФункция urlunparse()
модуля urllib.parse
объединяет элементы кортежа кортежа, возвращаемого функцией urllib.parse.urlparse()
в полный URL-адрес старого образца в виде строки.
Аргумент parts
может быть любым шестизначной последовательностью, поддерживающей итерацию.
Результат работы функции urllib.parse.urlunparse()
может привести к немного отличающемуся, но эквивалентному URL-адресу, если URL-адрес, который был проанализирован изначально, имел ненужные разделители (например, '?'
с пустым запросом).
urllib.parse.urlunparse()
:Для примера соберем из отдельных компонентов строку URL:
'https://docs-python.ru/search/?text=isinstance&web=0#anchor'
.
В документации сказано, что функция поддерживает любую шестизначную последовательность, поддерживающую итерацию. Следовательно для этой цели сгодится список.
Для начала получим список с шестью элементами. Так как начальное значение URL всегда известно, из него и получим этот список при помощи функции urllib.parse.urlparse()
.
>>> import urllib.parse
>>> base_url = 'https://docs-python.ru/'
>>> url_parts = list(urllib.parse.urlparse(base_url))
>>> url_parts
# ['https', 'docs-python.ru', '/', '', '', '']
Такие параметры URL как text=isinstance&web=0
нужно как то собирать и передавать в пятый элемент списка. Для этого есть функция urllib.parse.urlencode()
, которая закодирует и соберет правильным образом параметры запроса, представленные в качестве словаря.
>>> import urllib.parse
>>> args = {'text'='isinstance', 'web'=0}
>>> query = urllib.parse.urlencode(args)
>>> query
# 'text=isinstance&web=0'
Теперь только осталось все компоненты URL передать в список и собрать его при помощи функции urllib.parse.urlunparse()
.
Смотрим что получилось:
# получено выше
>>> url_parts = ['https', 'docs-python.ru', '/', '', '', '']
>>> path = '/search/'
# получено выше
>>> query = 'text=isinstance&web=0'
>>> anchor = 'anchor'
# Добавляем компоненты в список
>>> url_parts[2] = path
>>> url_parts[4] = query
>>> url_parts[5] = anchor
>>> url_parts
# ['https', 'docs-python.ru', '/search/', '', 'text=isinstance&web=0', 'anchor']
# подставляем список в качестве аргумента в функцию
>>> urllib.parse.urlunparse(url_parts)
# 'https://docs-python.ru/search/?text=isinstance&web=0#anchor'