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

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

Анализирует и разбирает строку запроса на параметры и из значения.

Синтаксис:

import urllib.parse

urllib.parse.parse_qs(qs, keep_blank_values=False, 
                      strict_parsing=False, encoding='utf-8', 
                      errors='replace', max_num_fields=None, 
                      separator='&')

urllib.parse.parse_qsl(qs, keep_blank_values=False, 
                       strict_parsing=False, encoding='utf-8', 
                       errors='replace', max_num_fields=None, 
                       separator='&')

Параметры:

  • qs - строку запроса типа application/x-www-form-urlencoded
  • keep_blank_values=False - что делать со значениями с процентным кодированием,
  • strict_parsing=False - что делать с ошибками при разборе строки запроса,
  • encoding='utf-8' - кодировка преобразования значений с процентным кодированием,
  • errors='replace' - обработчик ошибок кодировки,
  • max_num_fields=None - количество полей для анализа,
  • separator='&' - символ, используемый для разделения параметров запроса (доступен с версии Python 3.10).

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

  • parse_qs - словарь, где ключи - это уникальные имена переменных запроса, а значения - это списки значений для каждого имени,
  • parse_qsl - список кортежей типа [(key, value), (key, value), ...].

Описание:

Функция parse_qs() модуля urllib.parse разбирает строку запроса qs, заданную как строковый аргумент (данные типа application/x-www-form-urlencoded).

Данные возвращаются в виде словаря. Ключи словаря - это уникальные имена переменных запроса, а значения - это списки значений для каждого имени.

Функция parse_qsl() делает то же самое что и urllib.parse.parse_qs(), только данные возвращаются в виде списка пар, имя параметра - значение. Другими словами в виде списка кортежей типа [(key, value), (key, value), ...].

Необязательный аргумент keep_blank_values ​​- это флаг, указывающий, следует ли рассматривать пустые значения в запросах с процентной кодировкой как пустые строки. Значение True указывает, что пробелы следует сохранять в виде пустых строк. Значение False по умолчанию указывает, что пустые значения следует игнорировать и рассматривать так, как если бы они не были включены.

Необязательный аргумент strict_parsing - это флаг, указывающий, что делать с ошибками синтаксического анализа. Если значение False (по умолчанию), ошибки молча игнорируются. Если значение True, ошибки вызывают исключение ValueError.

Необязательные аргументы encoding и errors определяют, как декодировать последовательности с процентным кодированием в символы Юникода, как это принято методом bytes.decode().

Необязательный аргумент max_num_fields - это максимальное количество полей для анализа. Если прочитано больше полей max_num_fields, то выдает исключение ValueError.

Необязательный аргумент separator - это символ, используемый для разделения аргументов запроса. По умолчанию это &.

Используйте функцию urllib.parse.urlencode() (с параметром doseq=True) для преобразования словарей, возвращаемых функцией urllib.parse.parse_qs() в строки запроса.

Изменено в Python 3.8: добавлен параметр max_num_fields.

Изменено в Python 3.10: Добавлен аргумент separator со значением по умолчанию &. Версии Python до Python 3.10 позволяли использовать оба ; и & как разделитель параметров запроса. Это было изменено, чтобы разрешить использование только одного ключа-разделителя с & в качестве разделителя по умолчанию.

Примеры использования parse_qs() и parse_qsl():

>>> import urllib.parse

>>> query_string = 'product=смартфоны&s=9&v=5&v=15&t='

>>> urllib.parse.parse_qs(query_string)
# {'product': ['смартфоны'], 's': ['9'], 'v': ['5', '15']}
>>> urllib.parse.parse_qs(query_string, keep_blank_values=True)
# {'product': ['смартфоны'], 's': ['9'], 'v': ['5', '15'], 't': ['']}

>>> urllib.parse.parse_qsl(query_string)
# [('product', 'смартфоны'), ('s', '9'), ('v', '5'), ('v', '15')]
>>> urllib.parse.parse_qsl(query_string, keep_blank_values=True)
# [('product', 'смартфоны'), ('s', '9'), ('v', '5'), ('v', '15'), ('t', '')]