Source code: Lib/urlparse.py
该模块定义了一个标准接口,用于在组件中分割统一资源定位符(URL)字符串(寻址方案,网络位置,路径等)。),将组件重新组合成URL字符串,并将“相对URL”转换为给定“基本URL”的绝对URL。
该模块被设计为匹配相对统一资源定位符上的Internet RFC。It supports the following URL schemes: 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模块定义了以下功能:
将URL解析为六个组件,返回一个6元组。This corresponds to the general structure of a URL: scheme://netloc/path;parameters?query#fragment. 每个元组项都是一个字符串,可能是空的。组件不会在较小的部分分解(例如,网络位置是单个字符串),并且%转义不会展开。如上所示的分隔符不是结果的一部分,除了路径组件中的前导斜杠,如果存在则保留。For example:
>>> 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='')
如果指定了方案参数,它将提供默认寻址方案,仅在URL未指定的情况下才能使用。此参数的默认值为空字符串。
如果allow_fragments参数为false,则不允许使用片段标识符,即使URL的寻址方案通常也支持它们。此参数的默认值为True。
返回值实际上是tuple的子类的一个实例。此类具有以下附加的只读方便属性:
Attribute | Index | Value | Value if not present |
---|---|---|---|
scheme | 0 | URL方案说明符 | empty string |
netloc | 1 | 网络位置部分 | empty string |
path | 2 | 分层路径 | empty string |
params | 3 | 最后一个路径元素的参数 | empty string |
query | 4 | 查询组件 | empty string |
fragment | 5 | 片段标识符 | empty string |
username | 用户名 | None | |
password | 密码 | None | |
hostname | Host name (lower case) | None | |
port | Port number as integer, if present | None |
有关结果对象的更多信息,请参见urlparse()和urlsplit()的结果。
在版本2.5中更改:添加属性以返回值。
在版本2.7中更改:添加了IPv6 URL解析功能。
解析一个作为字符串参数给出的查询字符串(数据类型为application / x-www-form-urlencoded)。数据作为字典返回。字典键是唯一的查询变量名称,值是每个名称的值列表。
可选参数keep_blank_values是一个标志,指示百分比编码查询中的空白值是否应视为空白字符串。真实值表示空白字符串应保留为空白字符串。默认的false值表示将忽略空白值,并将其视为未包含的值。
可选参数strict_parsing是一个标志,指示如何解析错误。如果为false(默认值),则会忽略错误。如果为true,则错误引发ValueError异常。
使用urllib.urlencode()函数将这些字典转换为查询字符串。
新版本2.6:从cgi模块复制。
解析一个作为字符串参数给出的查询字符串(数据类型为application / x-www-form-urlencoded)。数据作为名称,值对的列表返回。
可选参数keep_blank_values是一个标志,指示百分比编码查询中的空白值是否应视为空白字符串。真实值表示空白字符串应保留为空白字符串。默认的false值表示将忽略空白值,并将其视为未包含的值。
可选参数strict_parsing是一个标志,指示如何解析错误。如果为false(默认值),则会忽略错误。如果为true,则错误引发ValueError异常。
使用urllib.urlencode()函数将这样的列表转换成查询字符串。
新版本2.6:从cgi模块复制。
从urlparse()返回的元组构造一个URL。部分参数可以是任何六项可迭代的。如果原先解析的URL不必要的分隔符(例如,一个?空查询; RFC声明这些是等效的)。
这与urlparse()相似,但不会将该参数与URL分解。一般来说,如果允许将参数应用到URL的路径部分的每个段的更新的URL语法(请参见),通常应该使用这个代替urlparse() RFC 2396)是需要的。需要单独的功能来分隔路径段和参数。该函数返回一个5元组:(寻址方案,网络位置,路径,查询,片段标识符)。
返回值实际上是tuple的子类的一个实例。此类具有以下附加的只读方便属性:
Attribute | Index | Value | Value if not present |
---|---|---|---|
scheme | 0 | URL方案说明符 | empty string |
netloc | 1 | 网络位置部分 | empty string |
path | 2 | 分层路径 | empty string |
query | 3 | 查询组件 | empty string |
fragment | 4 | 片段标识符 | empty string |
username | User name | None | |
password | Password | None | |
hostname | Host name (lower case) | None | |
port | Port number as integer, if present | None |
有关结果对象的更多信息,请参见urlparse()和urlsplit()的结果。
New in version 2.2.
在版本2.5中更改:添加属性以返回值。
将由urlsplit()返回的元组的元素组合成一个完整的URL作为字符串。部分参数可以是任何五项可迭代的。如果原先解析的URL不必要的分隔符(例如,一个?空查询; RFC声明这些是等效的)。
New in version 2.2.
通过将“基本URL”(base)与另一个URL(url)组合构建一个完整的(“绝对”)URL。非正式地,这使用基本URL的组件,特别是寻址方案,网络位置和路径的一部分,以在相对URL中提供缺少的组件。For example:
>>> from urlparse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
allow_fragments参数与urlparse()具有相同的含义和默认值。
Note
If url is an absolute URL (that is, starting with // or scheme://), the url‘s host name and/or scheme will be present in the result. For example:
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
... '//www.python.org/%7Eguido')
'http://www.python.org/%7Eguido'
If you do not want that behavior, preprocess the url with urlsplit() and urlunsplit(), removing possible scheme and netloc parts.
如果url包含片段标识符,则返回没有片段标识符的url的修改版本,并将片段标识符作为单独的字符串返回。If there is no fragment identifier in url, returns url unmodified and an empty string.
See also
来自urlparse()和urlsplit()函数的结果对象是tuple类型的子类。这些子类添加了这些函数中描述的属性,并提供了一个附加的方法:
将原始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/'
New in version 2.5.
以下类提供了解析结果的实现:
具体结果类的基类。这提供了大多数属性定义。它不提供geturl()方法。它来自tuple,但不覆盖__ init __()或__ new __()方法。
urlparse()结果的混合类。覆盖__ new __()方法来支持检查正确数量的参数的传递。
urlsplit()结果的具体类。覆盖__ new __()方法来支持检查正确数量的参数的传递。