urllib.parse —将URL解析为Python中的组件

此模块提供了一个标准接口,用于中断组件中的统一资源定位符(URL)字符串或将组件组合回URL字符串。它还具有将给定“基本URL”的“相对URL”转换为绝对URL的功能。

此模块支持以下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

    • ws

    • wss

urlparse()

此函数将URL解析为六个部分,返回一个6元组。这对应于URL的一般结构。每个元组项目都是一个字符串。组件不会分成较小的部分(例如,网络位置是单个字符串),并且%转义符不会扩展。返回值是由以下属性组成的元组子类的实例:

属性index值(如果不存在)
scheme0URL方案说明符方案参数
netloc1网络位置部分方案参数
path2分层路径空字符串
params3最后路径元素的参数空字符串
query4查询组件空字符串
fragment5片段标识符空字符串
username
用户名没有
password
密码没有
hostname
主机名(小写)没有
port
端口号为整数(如果存在)没有

示例

>>> from urllib.parse import urlparse
>>> url = 'https://mail.google.com/mail/u/0/?tab = rm#inbox'
>>> t = urlparse(url)
ParseResult(scheme = 'https', netloc = 'mail.google.com', path = '/mail/u/0/', params = '', query = 'tab = rm', fragment = 'inbox')

urlunparse(parts)

urlparse()函数根据返回的元组构造URL。parts参数可以是任何六项可迭代的。

>>> from urllib.parse import urlunparse
>>> urlunparse(t)
'https://mail.google.com/mail/u/0/?tab = rm#inbox'

urlsplit(urlstring, scheme = '', allow_fragments = True):

这类似于urlparse(),但不会从URL拆分参数。该函数返回一个5元组:(寻址方案,网络位置,路径,查询,片段标识符)。

>>> from urllib.parse import urlsplit
>>> urlsplit(url)
SplitResult(scheme = 'https', netloc = 'mail.google.com', path = '/mail/u/0/', query = 'tab = rm', fragment = 'inbox')

urlunsplit(parts)

此函数将返回的元组元素组合urlsplit()为完整的URL作为字符串。

URL引用功能着重于获取程序数据并通过引用特殊字符并适当地编码非ASCII文本来使其安全地用作URL组件。

quote()

此函数使用%xx转义符替换字符串中的特殊字符。字母,数字和字符“ _.-〜”都不会被引用。

>>> from urllib.parse import quote
>>> q = quote(url)
'https%3A//mail.google.com/mail/u/0/%3Ftab%3Drm%23inbox'
quote_plus():

与一样quote(),也可以用加号替换空格,这是建立查询字符串以进入URL时引用HTML表单值所必需的。

unquote()

此函数用单字符等效项替换%xx转义。

>>> from urllib.parse import unquote
>>> unquote(q)
'https://mail.google.com/mail/u/0/?tab = rm#inbox'

urlencode()

此函数将映射对象或两个元素的元组序列转换为百分比编码的ASCII文本字符串。结果字符串是由“&”字符分隔的一系列键=值对。

>>> from urllib.parse import urlencode
>>> qry = {"name":"Rajeev", "salary":20000}
>>> urlencode(qry)
'name = Rajeev&salary = 20000'