Python内置模块urllib详解:URL解析、编码与解码实战
本文深入解析Python内置模块urllib,重点介绍urlparse、parse_qs、urlencode、quote及unquote等核心方法。通过实际代码示例,展示如何拆分URL、处理查询参数、进行字符编码与解码,帮助开发者高效处理网络请求中的URL操作。
urllib模块概述
urllib是Python标准库中的内置模块,专门用于处理与URL相关的各种操作,包括访问URL、解析URL等任务。

urllib包下的 request 模块主要用于访问URL,但由于其使用频率相对较低,其功能常被第三方库 requests 所覆盖。在实际开发中,最常用的是parse模块。在编写爬虫程序时,经常需要对URL进行参数拼接、编码、解码,以及提取域名和资源路径等操作,此时parse模块便派上了用场。
URL解析:urlparse与parse_qs
一、urlparse
利用urlparse方法,可以将一个完整的URL拆分为不同的组成部分,用户可根据需求提取其中的特定部分。返回的结果ParseResult是namedtuple的子类,包含以下10个部分,每部分既可以通过名称访问,也可以通过索引获取。

>>> from urllib import parse
>>> url = 'https://mp.weixin.qq.com/s?__biz=MjM5MzgyODQxMQ==&mid=2650366919&idx=1&sn=1b36a9f2c0921cdeac52942ec591a923#rd'
>>> result = parse.urlparse(url)
# 返回ParseResult对象
>>> print(result)
ParseResult(scheme='https', netloc='mp.weixin.qq.com', path='/s', params='', query='__biz=MjM5MzgyODQxMQ==&mid=2650366919&idx=1&sn=1b36a9f2c0921cdeac52942ec591a923', fragment='rd')
# 通过下标获取协议
>>> result[0]
'https'
# 协议
>>> result.scheme
'https'
# url资源路径
>>> result.path
'/s'
# 查询参数
>>> result.query
'__biz=MjM5MzgyODQxMQ==&mid=2650366919&idx=1&sn=1b36a9f2c0921cdeac52942ec591a923'
# 获取主机名
>>> result.hostname
'mp.weixin.qq.com'
二、parse_qs
parse_qs方法的作用是将查询参数部分从字符串转换为字典对象。
>>> parse.parse_qs(result.query)
{'__biz': ['MjM5MzgyODQxMQ=='], 'mid': ['2650366919'], 'idx': ['1'], 'sn': ['1b36a9f2c0921cdeac52942ec591a923']}
>>>
每个参数名对应一个列表对象,这是因为在URL规范中,一个参数名可以拥有多个值,例如:a=1&a=2。不过,在实际应用场景中,通常一个参数名只对应一个值。
你可以使用一行代码将列表转换为字符串。
>>> {name: value[0] for name, value in parse.parse_qs(result.query).items()}
{'__biz': 'MjM5MzgyODQxMQ==', 'mid': '2650366919', 'idx': '1', 'sn': '1b36a9f2c0921cdeac52942ec591a923'}
URL编码:urlencode与quote
三、urlencode
反之,如果希望将字典对象转换为URL中的查询参数,可以使用urlencode方法。
>>> d = {'__biz': 'MjM5MzgyODQxMQ==', 'mid': '2650366919', 'idx': '1'}
>>> parse.urlencode(d)
'__biz=MjM5MzgyODQxMQ%3D%3D&mid=2650366919&idx=1'
四、quote
根据URL的标准规范,URL仅允许数字、字母及部分特殊符号。若包含中文或其他特殊符号,则需使用UTF-8进行编码,将这些字符转换为%XX的形式。例如,【中】经UTF-8编码后的结果为:
>>> "中".encode()
b'\xe4\xb8\xad'
浏览器实际上会将【中】转换为%e4%b8%ad。

在Python中,可以使用quote方法对URL进行编码。对于特殊符号,也会转换为对应的16进制符号,例如【=】被转换为%3D。
>>> parse.quote("q=中")
'q%3D%E4%B8%AD'
>>>
quote_plus可以将空格编码为“+”。
>>> parse.quote_plus("a b")
'a+b'
>>> parse.quote("a b")
'a%20b'
URL解码:unquote
五、unquote
unquote是quote的逆向过程,称为URL解码,旨在方便开发者阅读解码后的内容。
>>> parse.unquote("q%3D%E4%B8%AD")
'q=中'
以上即为Python内置模块urllib的详细内容,更多关于Python内置模块urllib的资料,请关注本站其他相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













