当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python urllib.parse.urlparse用法及代码示例


用法:

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

将 URL 解析为六个组件,返回一个名为 tuple 的 6 项。这对应于 URL 的一般结构:scheme://netloc/path;parameters?query#fragment。每个元组项都是一个字符串,可能为空。组件不会被分解成更小的部分(例如,网络位置是单个字符串),并且不会扩展 % 转义。上面显示的分隔符不是结果的一部分,除了 path 组件中的前导斜杠,如果存在则保留。例如:

>>> from urllib.parse import urlparse
>>> urlparse("scheme://netloc/path;parameters?query#fragment")
ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='',
            query='query', fragment='fragment')
>>> o = urlparse("http://docs.python.org:80/3/library/urllib.parse.html?"
...              "highlight=params#url-parsing")
>>> o
ParseResult(scheme='http', netloc='docs.python.org:80',
            path='/3/library/urllib.parse.html', params='',
            query='highlight=params', fragment='url-parsing')
>>> o.scheme
'http'
>>> o.netloc
'docs.python.org:80'
>>> o.hostname
'docs.python.org'
>>> o.port
80
>>> o._replace(fragment="").geturl()
'http://docs.python.org:80/3/library/urllib.parse.html?highlight=params'

遵循语法规范RFC 1808, urlparse 仅当它被“//”正确引入时才识别 netloc。否则,输入被假定为相对 URL,因此以路径组件开始。

>>> from urllib.parse 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 未指定时使用。它应该是与 urlstring 相同的类型(文本或字节),除了始终允许使用默认值 '' 并在适当的情况下自动转换为 b''

如果 allow_fragments 参数为 false,则无法识别片段标识符。相反,它们被解析为路径、参数或查询组件的一部分,并且 fragment 在返回值中设置为空字符串。

返回值是一个命名元组,这意味着它的项可以通过索引或命名属性来访问,它们是:

属性

index

不存在时的值

scheme

0

URL 方案说明符

scheme参数

netloc

1

网络定位部分

空字符串

path

2

分层路径

空字符串

params

3

不再使用

总是一个空字符串

query

4

查询组件

空字符串

fragment

5

片段标识符

空字符串

username

用户名

None

password

Password

None

hostname

主机名(小写)

None

port

端口号为整数(如果存在)

None

如果在 URL 中指定了无效端口,则读取 port 属性将引发 ValueError。有关结果对象的更多信息,请参阅结构化解析结果部分。

netloc 属性中不匹配的方括号将引发 ValueError

netloc 属性中的字符在 NFKC 规范化(由 IDNA 编码使用)下分解为 /?#@: 中的任何一个将引发 ValueError 。如果在解析之前对 URL 进行了分解,则不会引发错误。

与所有命名元组的情况一样,子类具有一些特别有用的附加方法和属性。一种这样的方法是 _replace()_replace() 方法将返回一个新的 ParseResult 对象,用新值替换指定的字段。

>>> from urllib.parse import urlparse
>>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
>>> u
ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')
>>> u._replace(scheme='http')
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')

在 3.2 版中更改:添加了 IPv6 URL 解析函数。

在 3.3 版中更改:现在为所有 URL 方案解析片段(除非allow_fragment是假的),按照RFC 3986.以前,存在支持片段的方案的许可列表。

在 3.6 版中更改:超出范围的端口号现在会增加ValueError, 而不是返回None.

在 3.8 版中更改:在 NFKC 规范化下影响 netloc 解析的字符现在将引发ValueError.

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 urllib.parse.urlparse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。