用法:
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
用户名
password
Password
hostname
主机名(小写)
port
端口号为整数(如果存在)
如果在 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 urllib.parse.urljoin用法及代码示例
- Python urllib.parse.urllib.parse.SplitResult.geturl用法及代码示例
- Python urllib.request.urlretrieve用法及代码示例
- Python unittest.mock.AsyncMock.assert_awaited_once_with用法及代码示例
- Python unittest.TestCase.assertWarnsRegex用法及代码示例
- Python unittest.mock.Mock.reset_mock用法及代码示例
- Python unittest.mock.Mock.__class__用法及代码示例
- Python unittest.mock.Mock.call_args用法及代码示例
- Python unittest.TestCase.assertRaisesRegex用法及代码示例
- Python unittest.mock.call用法及代码示例
- Python unittest.mock.Mock.method_calls用法及代码示例
- Python unittest.mock.Mock.call_args_list用法及代码示例
- Python unittest.mock.AsyncMock.assert_any_await用法及代码示例
- Python unittest.mock.Mock.assert_called用法及代码示例
- Python unittest.TestCase.assertRaises用法及代码示例
- Python unittest.TestCase.tearDownClass用法及代码示例
- Python unittest.mock.Mock.assert_not_called用法及代码示例
- Python unittest.IsolatedAsyncioTestCase用法及代码示例
- Python unittest.TestCase.setUpClass用法及代码示例
- Python unittest.mock.AsyncMock.await_args_list用法及代码示例
注:本文由纯净天空筛选整理自python.org大神的英文原创作品 urllib.parse.urlparse。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。