urlparse (Internet) - Python 中文开发手册
注意
该urlparse模块被重命名为urllib.parsePython 3. 当将源代码转换为Python 3时,2to3工具将自动适应导入。
源代码: Lib / urlparse.py
此模块定义了一个标准接口,用于打破组件中的统一资源定位符(URL)字符串(寻址方案,网络位置,路径等),将组件返回到URL字符串中,并将“相对URL”转换为给出“基本URL”的绝对URL。
该模块已被设计为与相对统一资源定位符上的Internet RFC相匹配。它支持下列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。每个元组项都是一个字符串,可能是空的。组件不会在较小的部分中分解(例如,网络位置是单个字符串),并且%escapes不会扩展。上面显示的分隔符不是结果的一部分,除了路径组件中的前导斜杠(如果存在)保留。例如:
>>> from urlparse import urlparse >>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') >>> o 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。该类具有以下额外的只读便利属性:
属性 |
指数 |
值 |
价值如果不存在 |
---|---|---|---|
方案 |
0 |
URL方案说明符 |
方案参数 |
netloc |
1 |
网络位置部分 |
空字符串 |
路径 |
2 |
分层路径 |
空字符串 |
PARAMS |
3 |
最后一个路径元素的参数 |
空字符串 |
询问 |
4 |
查询组件 |
空字符串 |
分段 |
5 |
片段识别 |
空字符串 |
用户名 |
|
用户名 |
没有 |
密码 |
|
密码 |
没有 |
主机名 |
|
主机名(小写) |
没有 |
港口 |
|
端口号为整数(如果存在) |
没有 |
有关结果对象的更多信息,请参见urlparse()和urlsplit()的结果部分。
在版本2.5中进行了更改:向返回值添加了属性。
版本2.7中更改:增加了IPv6 URL解析功能。
urlparse.parse_qs(qs[, keep_blank_values[, strict_parsing]])
解析作为字符串参数给出的查询字符串(类型为application / x-www-form-urlencoded的数据)。数据作为字典返回。字典键是唯一的查询变量名称,值是每个名称的值列表。
可选参数keep_blank_values是一个标志,指示百分比编码查询中的空白值是否应视为空白字符串。真值表示空白字符应保留为空白字符串。默认值为false表示空白值将被忽略并视为未被包含。
可选参数strict_parsing是一个标志,指示如何解析错误。如果为false(默认值),则错误将被忽略。如果属实,错误会引发ValueError异常。
使用该urllib.urlencode()函数将这些字典转换为查询字符串。
版本2.6中的新功能:从cgi模块复制。
urlparse.parse_qsl(qs[, keep_blank_values[, strict_parsing]])
解析作为字符串参数给出的查询字符串(类型为application / x-www-form-urlencoded的数据)。数据以名称,值对的列表形式返回。
可选参数keep_blank_values是一个标志,指示百分比编码查询中的空白值是否应视为空白字符串。真值表示空白字符应保留为空白字符串。默认值为false表示空白值将被忽略并视为未被包含。
可选参数strict_parsing是一个标志,指示如何解析错误。如果为false(默认值),则错误将被忽略。如果属实,错误会引发ValueError异常。
使用该urllib.urlencode()函数将这些对列表转换为查询字符串。
版本2.6中的新功能:从cgi模块复制。
urlparse.urlunparse(parts)
从返回的元组构造一个URL urlparse()。该部分参数可以是任何六个项目迭代。如果最初解析的URL具有不必要的分隔符(例如,带有空查询的?; RFC声明它们是等同的),则这可能会导致稍微不同的但等同的URL。
urlparse.urlsplit(urlstring[, scheme[, allow_fragments]])
这与urlparse()URL 相似,但不会将参数分开。通常应该使用这种方法,而不是使用urlparse()允许将参数应用于URL 的路径部分的每个段(请参阅RFC 2396)的更新的URL语法。需要单独的功能来分隔路径段和参数。该函数返回一个5元组:(地址方案,网络位置,路径,查询,片段标识符)。
返回值实际上是一个子类的实例tuple。该类具有以下额外的只读便利属性:
属性 |
指数 |
值 |
价值如果不存在 |
---|---|---|---|
方案 |
0 |
URL方案说明符 |
方案参数 |
netloc |
1 |
网络位置部分 |
空字符串 |
路径 |
2 |
分层路径 |
空字符串 |
询问 |
3 |
查询组件 |
空字符串 |
分段 |
4 |
片段识别 |
空字符串 |
用户名 |
|
用户名 |
没有 |
密码 |
|
密码 |
没有 |
主机名 |
|
主机名(小写) |
没有 |
港口 |
|
端口号为整数(如果存在) |
没有 |
有关结果对象的更多信息,请参见urlparse()和urlsplit()的结果部分。
2.2版本中的新功能。
在版本2.5中进行了更改:向返回值添加了属性。
urlparse.urlunsplit(parts)
将返回的元组元素合并urlsplit()为一个完整的URL作为字符串。该部分参数可以是任何五个项目的迭代。如果最初解析的URL具有不必要的分隔符(例如,带有空查询的?; RFC声明它们是等同的),则这可能会导致稍微不同的但等同的URL。
2.2版本中的新功能。
urlparse.urljoin(base, url[, allow_fragments])
通过将“基本URL”(base)与另一个URL(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(即以//or 开头scheme://),则url的主机名和/或方案将出现在结果中。例如:
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', ... '//www.python.org/%7Eguido') 'http://www.python.org/%7Eguido'
如果您不想要这种行为,请使用和预处理url,urlsplit()并urlunsplit()删除可能的方案和netloc部分。
urlparse.urldefrag(url)
如果url包含片段标识符,则返回不带片段标识符的URL的修改版本,并将片段标识符作为单独的字符串返回。如果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()结果的具体类。
Python 中文开发手册