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

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

Делит/парсит URL-адрес на пять компонентов пути

Синтаксис:

import urllib.parse

urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)

Параметры:

  • urlstring - str или bytes - URL-адрес,
  • scheme='' - схема адресации по умолчанию,
  • allow_fragments=True - что делать с анкором на страницу HTML, обнаруженном в строке с URL-адресом.

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

Описание:

Функция urlsplit() модуля urllib.parse разбирает URL-адрес urlstring на ПЯТЬ компонентов и возвращает именованный кортеж из 5 (пяти) элементов, что соответствует новой структуре URL:

(addressing scheme, network location, path, query, fragment identifier)

# Например
https://netloc/path?Query#fragment`. 
# что соответствует кортежу:
(https, netloc, path, query, fragment)

Функция urllib.parse.urlsplit() похожа на urllib.parse.urlparse(), но не учитывает параметры последнего элемента пути URL-адреса.

>>> from urllib.parse import urlsplit
>>> url = urlsplit('https://docs-python.ru/search/?web=0#anchor')
>>> url
# SplitResult(scheme='https', netloc='docs-python.ru', 
#             path='/search/', query='web=0', fragment='anchor')
>>> url.scheme
# 'http'
>>> url.query
'web=0'
>>> url.geturl()
# 'https://docs-python.ru/search/?web=0#anchor'

Функцию urllib.parse.urlsplit() следует использовать, если требуется более новый синтаксис URL, позволяющий применять параметры к каждому сегменту части пути URL-адреса (см. RFC 2396). Для разделения сегментов пути и параметров требуется отдельная функция.

Возвращаемое значение (addressing scheme, network location, path, query, fragment identifier) - именованный кортеж, к его элементам можно получить доступ по индексу или как именованные атрибуты:

Hf

Атрибут№ индексаValueЗначение если его нет
scheme0Протокол addressing schemeАргумент scheme
netloc1Доменное имя network locationпустая строка
path2Путь pathпустая строка
query4Компонент запроса queryпустая строка
fragment5Идентификатор фрагмента fragment identifierпустая строка
usernameИмя пользователяNone
passwordПорольNone
hostnameИмя хоста в нижнем регистреNone
portНомер порта в виде целого числа, если он присутствуетNone
  • Чтение атрибута port вызовет исключение ValueError, если в URL-адресе указан недопустимый порт.
  • Несогласованные квадратные скобки в атрибуте netloc вызовут ошибку ValueError.
  • Символы в атрибуте netloc, которые разбираются при нормализации NFKC (как используется кодировкой IDNA) на любой из '/', '?', '#', '@' или ':', вызовут ValueError. Если URL-адрес будет разложен перед синтаксическим анализом, то ошибка не возникнет.

Как и в случае со всеми именованными кортежами, у подкласса есть несколько дополнительных методов и атрибутов, которые особенно полезны. Один из таких методов - namedtuple._replace(). Метод namedtuple._replace() вернет новый объект ParseResult, заменив указанные поля новыми значениями.

>>> from urllib.parse import urlsplit
>>> url = urlsplit('//docs-python.ru/search/?web=0#anchor')
>>> url
# SplitResult(scheme='', netloc='docs-python.ru', 
#             path='/search/', query='web=0', fragment='anchor')
>>> url._replace(scheme='https')
# SplitResult(scheme='https', netloc='docs-python.ru', 
#             path='/search/', query='web=0', fragment='anchor')

Примечание:

  • Изменено в Python 3.6: номера портов вне диапазона теперь вызывают ValueError, а не возвращают None.
  • Изменено в Python 3.8: символы, влияющие на синтаксический анализ netloc при нормализации NFKC, теперь будут вызывать ValueError.
  • Изменено в Python 3.10: символы новой строки и табуляции ASCII теперь удаляются из URL-адреса.