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 | Значение если его нет |
scheme | 0 | Протокол addressing scheme | Аргумент scheme |
netloc | 1 | Доменное имя network location | пустая строка |
path | 2 | Путь path | пустая строка |
query | 4 | Компонент запроса query | пустая строка |
fragment | 5 | Идентификатор фрагмента 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')
Примечание:
ValueError
, а не возвращают None
.netloc
при нормализации NFKC, теперь будут вызывать ValueError
.