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'