urlparse — Разбор URL на составляющие
Примечание
Модуль urlparse переименован в urllib.parse в Python 3. Инструмент 2to3 автоматически адаптирует импорты при преобразовании ваших источников в Python 3.
Исходный код: Lib/urlparse.py
Этот модуль определяет стандартный интерфейс для разбиения строк URL (Uniform Resource Locator) на составляющие (схема адресации, сетевое местоположение, путь и т. д.), для объединения составляющих обратно в строку URL и для преобразования «относительного URL» в абсолютный URL с учётом «базового URL».
Модуль разработан в соответствии со спецификациями RFC относительно относительных 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.
В версии 2.5: Поддержка схем sftp и sips.
Модуль urlparse определяет следующие функции:
-
urlparse.urlparse(urlstring[, scheme[, allow_fragments]]) -
Разбирает URL на шесть составляющих, возвращая кортеж из 6 элементов. Это соответствует общей структуре URL:
scheme://netloc/path;parameters?query#fragment. Каждый элемент кортежа — строка, возможно пустая. Составляющие не разбиваются на более мелкие части (например, сетевое местоположение — это одна строка), и % экранирования не расширяются. Разделители, как показано выше, не являются частью результата, за исключением ведущего слэша в компоненте path, который сохраняется, если он присутствует. Например:>>> from urlparse import urlparse >>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') >>> o # doctest: +NORMALIZE_WHITESPACE ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> o.scheme 'http' >>> o.port 80 >>> o.geturl() 'http://www.cwi.nl:80/%7Eguido/Python.html'В соответствии со спецификациями синтаксиса в RFC 1808, urlparse распознает netloc только если он корректно введён с помощью ‘//’. В противном случае входной данные считаются относительным URL и, следовательно, начинаются с компонента пути.
>>> from urlparse import urlparse >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html') ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('www.cwi.nl/%7Eguido/Python.html') ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html', params='', query='', fragment='') >>> urlparse('help/Python.html') ParseResult(scheme='', netloc='', path='help/Python.html', params='', query='', fragment='')Если задан аргумент scheme, он задаёт схему адресации по умолчанию, которая используется только в том случае, если URL её не указывает. Значение по умолчанию для этого аргумента — пустая строка.
Если аргумент allow_fragments равен false, идентификаторы фрагментов не распознаются и не анализируются как часть предыдущей составляющей, даже если схема адресации URL их обычно поддерживает. Значение по умолчанию для этого аргумента —
True.Возвращаемое значение на самом деле является экземпляром подкласса
tuple. Этот класс имеет следующие дополнительные читаемые только атрибуты-удобства:Атрибут
Индекс
Значение
Значение при отсутствии
scheme0
Указатель схемы URL
Параметр scheme
netloc1
Часть сетевого местоположения
пустая строка
path2
Иерархический путь
пустая строка
params3
Параметры последнего элемента пути
пустая строка
query4
Компонент запроса
пустая строка
fragment5
Идентификатор фрагмента
пустая строка
usernameИмя пользователя
passwordПароль
hostnameИмя хоста (в нижнем регистре)
portНомер порта как целое число, если есть
Дополнительная информация об объекте результата приведена в разделе Результаты urlparse() и urlsplit().
Символы в атрибуте
netloc, которые разлагаются при нормализации NFKC (используемой в кодировке IDNA) на любой из/,?,#,@, или:приведут к ошибкеValueError. Если URL разложен перед разбором или не является строкой Unicode, ошибка не будет поднята.Изменено в версии 2.5: Добавлены атрибуты в возвращаемое значение.
Изменено в версии 2.7: Добавлены возможности разбора IPv6 URL.
Изменено в версии 2.7.17: Символы, влияющие на разбор netloc при нормализации NFKC, теперь вызовут
ValueError.
-
urlparse.parse_qs(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]]) -
Разбирает строку запроса, заданную в качестве аргумента строки (данные типа application/x-www-form-urlencoded). Данные возвращаются в виде словаря. Ключи словаря — уникальные имена переменных запроса, а значения — списки значений для каждого имени.
Необязательный аргумент keep_blank_values — флаг, указывающий, должны ли пустые значения в закодированных процентами запросах обрабатываться как пустые строки. Истинное значение указывает на то, что пустые значения должны сохраняться как пустые строки. Значение по умолчанию false указывает на то, что пустые значения игнорируются и обрабатываются как если бы их не было.
Необязательный аргумент strict_parsing — флаг, указывающий, что делать с ошибками разбора. Если false (по умолчанию), ошибки молча игнорируются. Если true, ошибки генерируют исключение
ValueError.Необязательный аргумент max_num_fields — максимальное количество полей для чтения. Если задано, выбросит
ValueError, если прочитано более max_num_fields полей.Используйте функцию
urllib.urlencode()для преобразования таких словарей в строки запроса.В версии 2.6: Скопировано из модуля
cgi.Изменено в версии 2.7.16: Добавлен параметр max_num_fields.
-
urlparse.parse_qsl(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]]) -
Разбирает строку запроса, заданную в качестве аргумента строки (данные типа application/x-www-form-urlencoded). Данные возвращаются в виде списка пар имя-значение.
Необязательный аргумент keep_blank_values — флаг, указывающий, должны ли пустые значения в закодированных процентами запросах обрабатываться как пустые строки. Истинное значение указывает на то, что пустые значения должны сохраняться как пустые строки. Значение по умолчанию false указывает на то, что пустые значения игнорируются и обрабатываются как если бы их не было.
Необязательный аргумент strict_parsing — флаг, указывающий, что делать с ошибками разбора. Если false (по умолчанию), ошибки молча игнорируются. Если true, ошибки генерируют исключение
ValueError.Необязательный аргумент max_num_fields — максимальное количество полей для чтения. Если задано, выбросит
ValueError, если прочитано более max_num_fields полей.Используйте функцию
urllib.urlencode()для преобразования таких списков пар в строки запроса.В версии 2.6: Скопировано из модуля
cgi.Изменено в версии 2.7.16: Добавлен параметр max_num_fields.
-
urlparse.urlunparse(parts) -
Создаёт URL из кортежа, как возвращает
urlparse(). Аргумент parts может быть любым итерируемым объектом из шести элементов. Это может привести к слегка другому, но эквивалентному URL, если изначально разобранный URL имел ненужные разделители (например, ? с пустым запросом; RFC утверждает, что они эквивалентны).
-
urlparse.urlsplit(urlstring[, scheme[, allow_fragments]]) -
Это аналогично
urlparse(), но не разделяет параметры из URL. Это следует использовать вместоurlparse(), если требуется более новая синтаксическая конструкция URL, позволяющая применять параметры к каждому сегменту части path URL (см. RFC 2396). Для разделения сегментов пути и параметров требуется отдельная функция. Эта функция возвращает 5-кортеж: (схема адресации, сетевое расположение, путь, запрос, идентификатор фрагмента).Возвращаемое значение фактически является экземпляром подкласса
tuple. Этот класс имеет следующие дополнительные атрибуты только для чтения и удобства:Атрибут
Индекс
Значение
Значение, если не присутствует
scheme0
Спецификатор схемы URL
параметр scheme
netloc1
Часть сетевого расположения
пустая строка
path2
Иерархический путь
пустая строка
query3
Компонент запроса
пустая строка
fragment4
Идентификатор фрагмента
пустая строка
usernameИмя пользователя
passwordПароль
hostnameИмя хоста (в нижнем регистре)
portНомер порта как целое число, если присутствует
Дополнительную информацию об объекте результата см. в разделе Результаты urlparse() и urlsplit().
Символы в атрибуте
netloc, которые разлагаются при нормализации NFKC (как используется в кодировании IDNA), на любой из/,?,#,@, или:приведут к ошибкеValueError. Если URL разложен перед разбором или не является строкой Unicode, ошибка не будет поднята.В версии 2.2.
В версии 2.5: Добавлены атрибуты в возвращаемое значение.
В версии 2.7.17: Символы, влияющие на разбор netloc при нормализации NFKC, теперь вызовут
ValueError.
-
urlparse.urlunsplit(parts) -
Объединить элементы кортежа, возвращенного
urlsplit(), в полную строку URL. Аргумент parts может быть любым пятиэлементным итерируемым объектом. Это может привести к немного другому, но эквивалентному URL, если исходный разобранный URL имел ненужные разделители (например, ? с пустым запросом; RFC утверждает, что они эквивалентны).В версии 2.2.
-
urlparse.urljoin(base, url[, allow_fragments]) -
Создать полную («абсолютную») URL, комбинируя «базовую URL» (base) с другой URL (url). Неформально, это использует компоненты базовой URL, в частности схему адресации, сетевое расположение и (часть) пути, чтобы предоставить недостающие компоненты в относительной URL. Например:
>>> from urlparse import urljoin >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html') 'http://www.cwi.nl/%7Eguido/FAQ.html'Аргумент allow_fragments имеет такое же значение и по умолчанию, как у
urlparse().Примечание
Если url является абсолютной URL (т.е., начинающейся с
//илиscheme://), имя хоста и/или схема url будут присутствовать в результате. Например:>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', ... '//www.python.org/%7Eguido') 'http://www.python.org/%7Eguido'Если вы не хотите такого поведения, предварительно обработайте url с помощью
urlsplit()иurlunsplit(), удалив возможные части scheme и netloc.
-
urlparse.urldefrag(url) -
Если url содержит идентификатор фрагмента, возвращает изменённую копию url без идентификатора фрагмента и идентификатор фрагмента как отдельную строку. Если в url нет идентификатора фрагмента, возвращает url без изменений и пустую строку.
См. также
- RFC 3986 - Uniform Resource Identifiers
-
Это текущий стандарт (STD66). Любые изменения в модуле urlparse должны соответствовать ему. Некоторые отклонения могут быть замечены, которые в основном служат для обеспечения обратной совместимости и для определенных фактических требований к разбору, как это обычно наблюдается в основных браузерах.
- RFC 2732 - Формат литеральных адресов IPv6 в URL.
-
Это определяет требования к разбору IPv6 URL.
- RFC 2396 - Uniform Resource Identifiers (URI): Общий синтаксис
-
Документ, описывающий общие синтаксические требования как для Uniform Resource Names (URN), так и для Uniform Resource Locators (URL).
- RFC 2368 - Схема mailto URL.
-
Требования к разбору схем mailto URL.
- RFC 1808 - Относительные Uniform Resource Locators
-
Этот документ содержит правила объединения абсолютной и относительной URL, включая ряд «ненормальных примеров», регулирующих обработку граничных случаев.
- RFC 1738 - Uniform Resource Locators (URL)
-
Это определяет формальный синтаксис и семантику абсолютных URL.
1. Результаты urlparse() и urlsplit()
Объекты результатов функций urlparse() и urlsplit() являются подклассами типа tuple. Эти подклассы добавляют атрибуты, описанные в этих функциях, а также предоставляют дополнительный метод:
-
ParseResult.geturl() -
Возвращает объединённую версию исходного URL в виде строки. Она может отличаться от исходного URL тем, что схема всегда будет нормализована к нижнему регистру, и пустые компоненты могут быть удалены. В частности, пустые параметры, запросы и идентификаторы фрагментов будут удалены.
Результат этого метода является неподвижной точкой, если он возвращается через исходную функцию разбора:
>>> import urlparse >>> url = 'HTTP://www.Python.org/doc/#'
>>> r1 = urlparse.urlsplit(url) >>> r1.geturl() 'http://www.Python.org/doc/'
>>> r2 = urlparse.urlsplit(r1.geturl()) >>> r2.geturl() 'http://www.Python.org/doc/'
В версии 2.5.
Следующие классы предоставляют реализации результатов разбора:
-
class urlparse.ParseResult(scheme, netloc, path, params, query, fragment) -
Конкретный класс для результатов
urlparse().
-
class urlparse.SplitResult(scheme, netloc, path, query, fragment) -
Конкретный класс для результатов
urlsplit().
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/urlparse.html