urllib.parse.md
1> **Источник:** https://python-all.ru/3.2/library/urllib.parse.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.7. [`urllib.parse`](https://python-all.ru/3.2/library/urllib.parse.html#module-urllib.parse) – Разбор URL на компоненты89**Исходный код:** [Lib/urllib/parse.py](https://python-all.ru/src/3.2/Lib/urllib/parse.py)1011---1213Этот модуль предоставляет стандартный интерфейс для разбора строки URL на компоненты (схема адресации, сетевое расположение, путь и т.д.), обратной сборки компонентов в строку URL, а также для преобразования «относительного URL» в абсолютный по заданному «базовому URL».1415Модуль разработан в соответствии с RFC на относительные универсальные локаторы ресурсов (Relative Uniform Resource Locators). Он поддерживает следующие схемы URL: `file`, `ftp`, `gopher`, `hdl`, `http`, `https`, `imap`, `mailto`, `mms`, `news`, `nntp`, `prospero`, `rsync`, `rtsp`, `rtspu`, `sftp`, `shttp`, `sip`, `sips`, `snews`, `svn`, `svn+ssh`, `telnet`, `wais`.1617Модуль [`urllib.parse`](https://python-all.ru/3.2/library/urllib.parse.html#module-urllib.parse) определяет функции, которые делятся на две широкие категории: разбор URL и экранирование URL. Они подробно описаны в следующих разделах.1819## 20.7.1. Разбор URL2021Функции разбора URL предназначены для разделения строки URL на компоненты или для объединения компонентов URL в строку URL.2223#### `urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)`2425Разбирает URL на шесть компонентов и возвращает кортеж из шести элементов. Это соответствует общей структуре URL: `scheme://netloc/path;parameters?query#fragment`. Каждый элемент кортежа – строка, возможно пустая. Компоненты не разбиваются на более мелкие части (например, сетевое расположение – это одна строка), а %-последовательности не раскрываются. Разделители, показанные выше, не входят в результат, за исключением начальной косой черты в компоненте *path*, которая сохраняется, если присутствует. Например:2627```python28>>> from urllib.parse import urlparse29>>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')30>>> o 31ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',32 params='', query='', fragment='')33>>> o.scheme34'http'35>>> o.port368037>>> o.geturl()38'http://www.cwi.nl:80/%7Eguido/Python.html'39```4041Следуя синтаксическим спецификациям [**RFC 1808**](https://python-all.ru/3.2/library/urllib.parse.html), urlparse распознаёт netloc только в том случае, если она правильно введена символами '//'. В противном случае считается, что входные данные – это относительный URL, и, следовательно, они начинаются с компонента пути.4243```python44>>> from urllib.parse import urlparse45>>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')46ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',47 params='', query='', fragment='')48>>> urlparse('www.cwi.nl/%7Eguido/Python.html')49ParseResult(scheme='', netloc='', path='www.cwi.nl:80/%7Eguido/Python.html',50 params='', query='', fragment='')51>>> urlparse('help/Python.html')52ParseResult(scheme='', netloc='', path='help/Python.html', params='',53 query='', fragment='')54```5556Если аргумент *scheme* указан, он задаёт схему адресации по умолчанию, которая используется только в том случае, если URL сам её не указывает. Значение по умолчанию для этого аргумента – пустая строка.5758Если аргумент *allow\_fragments* равен false, идентификаторы фрагментов не допускаются, даже если схема адресации URL обычно их поддерживает. Значением по умолчанию для этого аргумента является [`True`](https://python-all.ru/3.2/library/constants.html#True).5960Возвращаемое значение на самом деле является экземпляром подкласса [`tuple`](https://python-all.ru/3.2/library/functions.html#tuple). Этот класс имеет следующие дополнительные атрибуты только для чтения, предоставляющие удобный доступ:6162| Атрибут | Индекс | Значение | Значение, если отсутствует |63| --- | --- | --- | --- |64| `scheme` | 0 | Спецификатор схемы URL | пустая строка |65| `netloc` | 1 | Сетевое расположение | пустая строка |66| `path` | 2 | Иерархический путь | пустая строка |67| `params` | 3 | Параметры последнего элемента пути | пустая строка |68| `query` | 4 | Компонент запроса | пустая строка |69| `fragment` | 5 | Идентификатор фрагмента | пустая строка |70| `username` | | Имя пользователя | [`None`](https://python-all.ru/3.2/library/constants.html#None) |71| `password` | | Пароль | [`None`](https://python-all.ru/3.2/library/constants.html#None) |72| `hostname` | | Имя хоста (в нижнем регистре) | [`None`](https://python-all.ru/3.2/library/constants.html#None) |73| `port` | | Номер порта как целое число, если указан | [`None`](https://python-all.ru/3.2/library/constants.html#None) |7475См. раздел [*Структурированные результаты разбора*](https://python-all.ru/3.2/library/urllib.parse.html#urlparse-result-object) для получения дополнительной информации об объекте результата.7677Изменено в версии 3.2: Добавлена возможность разбора URL с IPv6.7879#### `urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')`8081Разбирает строку запроса, переданную в качестве строкового аргумента (данные типа *application/x-www-form-urlencoded*). Данные возвращаются в виде словаря. Ключами словаря являются уникальные имена переменных запроса, а значениями – списки значений для каждого имени.8283Необязательный аргумент *keep\_blank\_values* – это флаг, указывающий, следует ли обрабатывать пустые значения в процентно-кодированных запросах как пустые строки. Значение True означает, что пустые значения должны сохраняться как пустые строки. Значение False по умолчанию означает, что пустые значения игнорируются и считаются отсутствующими.8485Необязательный аргумент *strict\_parsing* – флаг, указывающий, что делать с ошибками разбора. Если false (по умолчанию), ошибки игнорируются. Если true, ошибки вызывают исключение [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError).8687Необязательные параметры *encoding* и *errors* задают способ декодирования процентно-закодированных последовательностей в символы Unicode, как это принимается методом [`bytes.decode()`](https://python-all.ru/3.2/library/stdtypes.html#bytes.decode).8889Используйте функцию [`urllib.parse.urlencode()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlencode) для преобразования таких словарей в строки запроса.9091Изменено в версии 3.2: Добавлены параметры *encoding* и *errors*.9293#### `urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')`9495Разбирает строку запроса, переданную в качестве строкового аргумента (данные типа *application/x-www-form-urlencoded*). Данные возвращаются в виде списка пар имя, значение.9697Необязательный аргумент *keep\_blank\_values* – это флаг, указывающий, следует ли обрабатывать пустые значения в процентно-кодированных запросах как пустые строки. Значение True означает, что пустые значения должны сохраняться как пустые строки. Значение False по умолчанию означает, что пустые значения игнорируются и считаются отсутствующими.9899Необязательный аргумент *strict\_parsing* – флаг, указывающий, что делать с ошибками разбора. Если false (по умолчанию), ошибки игнорируются. Если true, ошибки вызывают исключение [`ValueError`](https://python-all.ru/3.2/library/exceptions.html#ValueError).100101Необязательные параметры *encoding* и *errors* задают способ декодирования процентно-закодированных последовательностей в символы Unicode, как это принимается методом [`bytes.decode()`](https://python-all.ru/3.2/library/stdtypes.html#bytes.decode).102103Используйте функцию [`urllib.parse.urlencode()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlencode) для преобразования таких списков пар в строки запроса.104105Изменено в версии 3.2: Добавлены параметры *encoding* и *errors*.106107#### `urllib.parse.urlunparse(parts)`108109Создаёт URL из кортежа, возвращаемого функцией `urlparse()`. Аргумент *parts* может быть любым итерируемым объектом из шести элементов. Результат может немного отличаться от исходного, но быть эквивалентным URL, если исходный URL содержал лишние разделители (например, `?` с пустым запросом; RFC утверждает, что они эквивалентны).110111#### `urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)`112113Эта функция похожа на [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse), но не отделяет параметры от URL. Как правило, её следует использовать вместо [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse), если требуется более новый синтаксис URL, допускающий применение параметров к каждому сегменту части *path* (см. [**RFC 2396**](https://python-all.ru/3.2/library/urllib.parse.html)). Для разделения сегментов пути и параметров нужна отдельная функция. Эта функция возвращает 5-кортеж: (схема адресации, сетевое расположение, путь, запрос, идентификатор фрагмента).114115Возвращаемое значение на самом деле является экземпляром подкласса [`tuple`](https://python-all.ru/3.2/library/functions.html#tuple). Этот класс имеет следующие дополнительные атрибуты только для чтения, предоставляющие удобный доступ:116117| Атрибут | Индекс | Значение | Значение, если отсутствует |118| --- | --- | --- | --- |119| `scheme` | 0 | Спецификатор схемы URL | пустая строка |120| `netloc` | 1 | Сетевое расположение | пустая строка |121| `path` | 2 | Иерархический путь | пустая строка |122| `query` | 3 | Компонент запроса | пустая строка |123| `fragment` | 4 | Идентификатор фрагмента | пустая строка |124| `username` | | Имя пользователя | [`None`](https://python-all.ru/3.2/library/constants.html#None) |125| `password` | | Пароль | [`None`](https://python-all.ru/3.2/library/constants.html#None) |126| `hostname` | | Имя хоста (в нижнем регистре) | [`None`](https://python-all.ru/3.2/library/constants.html#None) |127| `port` | | Номер порта как целое число, если указан | [`None`](https://python-all.ru/3.2/library/constants.html#None) |128129См. раздел [*Структурированные результаты разбора*](https://python-all.ru/3.2/library/urllib.parse.html#urlparse-result-object) для получения дополнительной информации об объекте результата.130131#### `urllib.parse.urlunsplit(parts)`132133Объединяет элементы кортежа, возвращаемого функцией [`urlsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlsplit), в полный URL в виде строки. Аргумент *parts* может быть любым итерируемым объектом из пяти элементов. Результат может немного отличаться, но быть эквивалентным, если исходный URL содержал лишние разделители (например, ? с пустым запросом; RFC утверждает, что они эквивалентны).134135#### `urllib.parse.urljoin(base, url, allow_fragments=True)`136137Строит полный («абсолютный») URL путём объединения «базового URL» (*base*) с другим URL (*url*). Неформально: используются компоненты базового URL, в частности схема адресации, сетевое расположение и (часть) пути, чтобы предоставить недостающие компоненты в относительном URL. Например:138139```python140>>> from urllib.parse import urljoin141>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')142'http://www.cwi.nl/%7Eguido/FAQ.html'143```144145Аргумент *allow\_fragments* имеет тот же смысл и значение по умолчанию, что и для [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse).146147> **Примечание**148>149> Если *url* является абсолютным URL (то есть начинается с `//` или `scheme://`), то имя хоста и/или схема *url* будут присутствовать в результате. Например:150151```python152>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',153... '//www.python.org/%7Eguido')154'http://www.python.org/%7Eguido'155```156157Если такое поведение нежелательно, предварительно обработайте *url* с помощью [`urlsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlsplit) и [`urlunsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlunsplit), удалив возможные части *scheme* и *netloc*.158159#### `urllib.parse.urldefrag(url)`160161Если *url* содержит идентификатор фрагмента, возвращает изменённую версию *url* без идентификатора фрагмента и сам идентификатор фрагмента в виде отдельной строки. Если в *url* нет идентификатора фрагмента, возвращает *url* без изменений и пустую строку.162163Возвращаемое значение на самом деле является экземпляром подкласса [`tuple`](https://python-all.ru/3.2/library/functions.html#tuple). Этот класс имеет следующие дополнительные атрибуты только для чтения, предоставляющие удобный доступ:164165| Атрибут | Индекс | Значение | Значение, если отсутствует |166| --- | --- | --- | --- |167| `url` | 0 | URL без фрагмента | пустая строка |168| `fragment` | 1 | Идентификатор фрагмента | пустая строка |169170См. раздел [*Структурированные результаты разбора*](https://python-all.ru/3.2/library/urllib.parse.html#urlparse-result-object) для получения дополнительной информации об объекте результата.171172Изменено в версии 3.2: Результат – структурированный объект, а не простой кортеж из двух элементов.173174## 20.7.2. Разбор ASCII-кодированных байтов175176Функции разбора URL изначально разрабатывались для работы только со строками символов. На практике полезно иметь возможность манипулировать правильно экранированными и закодированными URL как последовательностями байтов ASCII. Соответственно, функции разбора URL в этом модуле работают как с объектами [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) и [`bytearray`](https://python-all.ru/3.2/library/functions.html#bytearray), так и с объектами [`str`](https://python-all.ru/3.2/library/functions.html#str).177178Если переданы данные типа [`str`](https://python-all.ru/3.2/library/functions.html#str), то результат будет содержать только данные типа [`str`](https://python-all.ru/3.2/library/functions.html#str). Если переданы данные типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) или [`bytearray`](https://python-all.ru/3.2/library/functions.html#bytearray), то результат будет содержать только данные типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes).179180Попытка смешивать данные типа [`str`](https://python-all.ru/3.2/library/functions.html#str) с данными типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) или [`bytearray`](https://python-all.ru/3.2/library/functions.html#bytearray) в одном вызове функции приведёт к возбуждению исключения [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError), а попытка передать не-ASCII байтовые значения вызовет [`UnicodeDecodeError`](https://python-all.ru/3.2/library/exceptions.html#UnicodeDecodeError).181182Для упрощения преобразования результирующих объектов между [`str`](https://python-all.ru/3.2/library/functions.html#str) и [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) все возвращаемые значения функций разбора URL предоставляют либо метод `encode()` (если результат содержит данные [`str`](https://python-all.ru/3.2/library/functions.html#str)), либо метод `decode()` (если результат содержит данные [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes)). Сигнатуры этих методов совпадают с сигнатурами соответствующих методов [`str`](https://python-all.ru/3.2/library/functions.html#str) и [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) (за исключением того, что кодировка по умолчанию – `'ascii'`, а не `'utf-8'`). Каждый из них возвращает значение соответствующего типа, содержащее либо данные [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) (для методов `encode()`), либо данные [`str`](https://python-all.ru/3.2/library/functions.html#str) (для методов `decode()`).183184Приложениям, которым необходимо работать с потенциально неправильно экранированными URL, которые могут содержать не-ASCII данные, потребуется выполнить собственное декодирование из байтов в символы перед вызовом методов разбора URL.185186Поведение, описанное в этом разделе, применяется только к функциям разбора URL. Функции экранирования URL используют свои собственные правила при создании или потреблении последовательностей байтов, как подробно описано в документации отдельных функций экранирования URL.187188Изменено в версии 3.2: Функции разбора URL теперь принимают ASCII-кодированные байтовые последовательности.189190## 20.7.3. Структурированные результаты разбора191192Результирующие объекты функций [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse), [`urlsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlsplit) и [`urldefrag()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urldefrag) являются подклассами типа [`tuple`](https://python-all.ru/3.2/library/functions.html#tuple). Эти подклассы добавляют атрибуты, перечисленные в документации этих функций, поддержку кодирования и декодирования, описанную в предыдущем разделе, а также дополнительный метод:193194#### `urllib.parse.SplitResult.geturl()`195196Возвращает перекомбинированную версию исходного URL в виде строки. Она может отличаться от исходного URL тем, что схема может быть нормализована к нижнему регистру, а пустые компоненты могут быть отброшены. В частности, пустые параметры, запросы и идентификаторы фрагментов будут удалены.197198Для результатов [`urldefrag()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urldefrag) будут удалены только пустые идентификаторы фрагментов. Для результатов [`urlsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlsplit) и [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse) все указанные изменения будут внесены в URL, возвращаемый этим методом.199200Результат этого метода остается неизменным, если его снова передать через исходную функцию разбора:201202```python203>>> from urllib.parse import urlsplit204>>> url = 'HTTP://www.Python.org/doc/#'205>>> r1 = urlsplit(url)206>>> r1.geturl()207'http://www.Python.org/doc/'208>>> r2 = urlsplit(r1.geturl())209>>> r2.geturl()210'http://www.Python.org/doc/'211```212213Следующие классы предоставляют реализацию структурированных результатов разбора при работе с объектами [`str`](https://python-all.ru/3.2/library/functions.html#str):214215#### `class urllib.parse.DefragResult(url, fragment)`216217Конкретный класс для результатов [`urldefrag()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urldefrag), содержащих данные типа [`str`](https://python-all.ru/3.2/library/functions.html#str). Метод `encode()` возвращает экземпляр [`DefragResultBytes`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.DefragResultBytes).218219Новое в версии 3.2.220221#### `class urllib.parse.ParseResult(scheme, netloc, path, params, query, fragment)`222223Конкретный класс для результатов [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse), содержащих данные типа [`str`](https://python-all.ru/3.2/library/functions.html#str). Метод `encode()` возвращает экземпляр [`ParseResultBytes`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.ParseResultBytes).224225#### `class urllib.parse.SplitResult(scheme, netloc, path, query, fragment)`226227Конкретный класс для результатов [`urlsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlsplit), содержащих данные типа [`str`](https://python-all.ru/3.2/library/functions.html#str). Метод `encode()` возвращает экземпляр [`SplitResultBytes`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.SplitResultBytes).228229Следующие классы предоставляют реализацию результатов разбора при работе с объектами [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) или [`bytearray`](https://python-all.ru/3.2/library/functions.html#bytearray):230231#### `class urllib.parse.DefragResultBytes(url, fragment)`232233Конкретный класс для результатов [`urldefrag()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urldefrag), содержащих данные типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes). Метод `decode()` возвращает экземпляр [`DefragResult`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.DefragResult).234235Новое в версии 3.2.236237#### `class urllib.parse.ParseResultBytes(scheme, netloc, path, params, query, fragment)`238239Конкретный класс для результатов [`urlparse()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlparse), содержащих данные типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes). Метод `decode()` возвращает экземпляр [`ParseResult`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.ParseResult).240241Новое в версии 3.2.242243#### `class urllib.parse.SplitResultBytes(scheme, netloc, path, query, fragment)`244245Конкретный класс для результатов [`urlsplit()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.urlsplit), содержащих данные типа [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes). Метод `decode()` возвращает экземпляр [`SplitResult`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.SplitResult).246247Новое в версии 3.2.248249## 20.7.4. Экранирование URL250251Функции экранирования URL предназначены для преобразования программных данных в безопасный формат для использования в компонентах URL: они экранируют специальные символы и кодируют не-ASCII текст. Они также поддерживают обратные операции для восстановления исходных данных из содержимого компонента URL, если эта задача ещё не решается описанными выше функциями разбора URL.252253#### `urllib.parse.quote(string, safe='/', encoding=None, errors=None)`254255Заменяет специальные символы в *string* с помощью экранирования `%xx`. Буквы, цифры и символы `'_.-'` никогда не экранируются. По умолчанию эта функция предназначена для экранирования компонента пути URL. Необязательный параметр *safe* задаёт дополнительные символы ASCII, которые не должны экранироваться – его значение по умолчанию равно `'/'`.256257*string* может быть как строкой [`str`](https://python-all.ru/3.2/library/functions.html#str), так и объектом [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes).258259Необязательные параметры *encoding* и *errors* определяют, как обрабатывать не-ASCII символы; они принимаются методом [`str.encode()`](https://python-all.ru/3.2/library/stdtypes.html#str.encode). *encoding* по умолчанию равен `'utf-8'`. *errors* по умолчанию равен `'strict'`, то есть неподдерживаемые символы вызывают [`UnicodeEncodeError`](https://python-all.ru/3.2/library/exceptions.html#UnicodeEncodeError). *encoding* и *errors* не должны указываться, если *string* является [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), иначе будет возбуждено [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError).260261Обратите внимание, что `quote(string, safe, encoding, errors)` эквивалентно `quote_from_bytes(string.encode(encoding, errors), safe)`.262263Пример: `quote('/El Niño/')` возвращает `'/El%20Ni%C3%B1o/'`.264265#### `urllib.parse.quote_plus(string, safe='', encoding=None, errors=None)`266267Аналогична [`quote()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.quote), но также заменяет пробелы знаками плюс, как требуется для экранирования значений HTML-форм при составлении строки запроса для URL. Знаки плюс в исходной строке экранируются, если они не включены в *safe*. Кроме того, значение по умолчанию *safe* не равно `'/'`.268269Пример: `quote_plus('/El Niño/')` возвращает `'%2FEl+Ni%C3%B1o%2F'`.270271#### `urllib.parse.quote_from_bytes(bytes, safe='/')`272273Аналогична [`quote()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.quote), но принимает объект [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes) вместо [`str`](https://python-all.ru/3.2/library/functions.html#str) и не выполняет преобразование строки в байты.274275Пример: `quote_from_bytes(b'a&\xef')` возвращает `'a%26%EF'`.276277#### `urllib.parse.unquote(string, encoding='utf-8', errors='replace')`278279Заменяет последовательности `%xx` на соответствующий им одиночный символ. Необязательные параметры *encoding* и *errors* задают, как декодировать процентно-кодированные последовательности в символы Юникода, как это делается в методе [`bytes.decode()`](https://python-all.ru/3.2/library/stdtypes.html#bytes.decode).280281*string* должен иметь тип [`str`](https://python-all.ru/3.2/library/functions.html#str).282283По умолчанию *encoding* равен `'utf-8'`. *errors* по умолчанию равен `'replace'`, то есть недопустимые последовательности заменяются на символ-заменитель.284285Пример: `unquote('/El%20Ni%C3%B1o/')` возвращает `'/El Niño/'`.286287#### `urllib.parse.unquote_plus(string, encoding='utf-8', errors='replace')`288289Аналогично [`unquote()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.unquote), но дополнительно заменяет знаки плюс пробелами, что требуется для декодирования значений HTML-форм.290291*string* должен иметь тип [`str`](https://python-all.ru/3.2/library/functions.html#str).292293Пример: `unquote_plus('/El+Ni%C3%B1o/')` возвращает `'/El Niño/'`.294295#### `urllib.parse.unquote_to_bytes(string)`296297Заменяет последовательности `%xx` на эквивалентный одиночный октет и возвращает объект [`байтов`](https://python-all.ru/3.2/library/functions.html#bytes).298299*string* может быть как строкой [`str`](https://python-all.ru/3.2/library/functions.html#str), так и объектом [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes).300301Если это строка [`str`](https://python-all.ru/3.2/library/functions.html#str), то неэкранированные не-ASCII символы в *string* кодируются в байты UTF-8.302303Пример: `unquote_to_bytes('a%26%EF')` возвращает `b'a&\xef'`.304305#### `urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None)`306307Преобразует отображающий объект (mapping) или последовательность двухэлементных кортежей, которые могут быть либо [`str`](https://python-all.ru/3.2/library/functions.html#str), либо [`bytes`](https://python-all.ru/3.2/library/functions.html#bytes), в строку с «процентным кодированием». Если полученная строка будет использоваться как *data* для операции POST с функцией `urlopen()`, то её следует корректно закодировать в байты, иначе возникнет [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError).308309Результирующая строка представляет собой последовательность пар `ключ=значение`, разделённых символами `'&'`, где и *key*, и *value* кодируются с помощью [`quote_plus()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.quote_plus) (см. выше). Если в качестве аргумента *query* используется последовательность двухэлементных кортежей, то первый элемент каждого кортежа является ключом, а второй – значением. Сам элемент значения может быть последовательностью, и в этом случае, если необязательный параметр *doseq* принимает значение *True*, для каждого элемента последовательности значений ключа генерируются отдельные пары `ключ=значение`, разделённые `'&'`. Порядок параметров в закодированной строке будет соответствовать порядку кортежей параметров в последовательности.310311Когда параметр *query* является [`str`](https://python-all.ru/3.2/library/functions.html#str), параметры *safe*, *encoding* и *error* передаются в [`quote_plus()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.quote_plus) для кодирования.312313Для обратного преобразования этой кодировки в этом модуле предоставляются функции [`parse_qs()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.parse_qs) и [`parse_qsl()`](https://python-all.ru/3.2/library/urllib.parse.html#urllib.parse.parse_qsl), которые разбирают строки запроса в структуры данных Python.314315Обратитесь к [*примерам urllib*](https://python-all.ru/3.2/library/urllib.request.html#urllib-examples), чтобы узнать, как метод urlencode можно использовать для создания строки запроса для URL или данных для POST.316317Изменено в версии 3.2: Параметр query поддерживает объекты bytes и str.318319> **См. также**320>321> **[**RFC 3986**](https://python-all.ru/3.2/library/urllib.parse.html) – Uniform Resource Identifiers**322>323> Это текущий стандарт (STD66). Любые изменения в модуле urllib.parse должны ему соответствовать. Могут наблюдаться некоторые отклонения, которые в основном обусловлены обратной совместимостью и некоторыми фактическими требованиями парсинга, обычно встречающимися в основных браузерах.324>325> **[**RFC 2732**](https://python-all.ru/3.2/library/urllib.parse.html) – Формат литеральных IPv6-адресов в URL.**326>327> В нём описываются требования к парсингу IPv6 URL.328>329> **[**RFC 2396**](https://python-all.ru/3.2/library/urllib.parse.html) – Uniform Resource Identifiers (URI): Generic Syntax**330>331> Документ, описывающий общие синтаксические требования как для Uniform Resource Names (URN), так и для Uniform Resource Locators (URL).332>333> **[**RFC 2368**](https://python-all.ru/3.2/library/urllib.parse.html) – Схема URL mailto.**334>335> Требования к разбору URL-схем ⟦mailto⟧.336>337> **[**RFC 1808**](https://python-all.ru/3.2/library/urllib.parse.html) – Relative Uniform Resource Locators**338>339> Этот документ (RFC) включает правила объединения абсолютного и относительного URL, включая значительное количество «Аномальных примеров», которые определяют обработку граничных случаев.340>341> **[**RFC 1738**](https://python-all.ru/3.2/library/urllib.parse.html) – Uniform Resource Locators (URL)**342>343> В нём описывается формальный синтаксис и семантика абсолютных URL.344