urlparse

注意

urlparse模块被重命名为urllib.parsePython 3. 当将源代码转换为Python 3时,2to3工具将自动适应导入。

源代码: Lib / urlparse.py

此模块定义了一个标准接口,用于打破组件中的统一资源定位符(URL)字符串(寻址方案,网络位置,路径等),将组件返回到URL字符串中,并将“相对URL”转换为给出“基本URL”的绝对URL。

该模块已被设计为与相对统一资源定位符上的Internet RFC相匹配。它支持下列URL方案:fileftpgopherhdlhttphttpsimapmailtommsnewsnntpprosperorsyncrtsprtspusftpshttpsipsipssnewssvnsvn+sshtelnetwais

2.5版新增功能:支持sftpsips计划。

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'

如果您不想要这种行为,请使用和预处理urlurlsplit()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()结果的具体类。

扫码关注云+社区

领取腾讯云代金券