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


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

此模块支持以下 URL 方案 -

  • 文件
  • FTP
  • Gopher
  • HDL
  • HTTP
  • HTTPS
  • IMAP
  • Mailto
  • MMS
  • 新闻
  • NNTP
  • Prospero
  • Rsync
  • RTSP
  • RTSPU
  • SFTP
  • SHTTP
  • SIP
  • Sips
  • Snews
  • SVN
  • SVN+SSH
  • Telnet
  • Wais
  • WS
  • WSS

urlparse()

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

属性索引如果不存在,则为值
方案0URL 方案说明符方案参数
netloc1网络位置部分方案参数
路径2分层路径空字符串
参数3最后一个路径元素的参数空字符串
查询4查询组件空字符串
片段5片段标识符空字符串
用户名
用户名
密码
密码
主机名
主机名(小写)
端口
端口号(如果存在)作为整数

示例

>>> 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 中拆分 params。此函数返回一个 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'

更新于:2019-07-30

7K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.