urlparse
urlparse — Parse URLs into components
注意
该urlparse
模块被重命名为urllib.parse
Python 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()
结果的具体类。