详解python内置模块urllib


Posted in Python onSeptember 09, 2020

urllib 是 python 的内置模块, 主要用于处理url相关的一些操作,例如访问url、解析url等操作。

详解python内置模块urllib

urllib 包下面的 request 模块主要用于访问url,但是用得太多,因为它的光芒全都被 requests 这个第三方库覆盖了,最常用的还是 parse 模块。 写爬虫过程中,经常要对url进行参数的拼接、编码、解码,域名、资源路径提取等操作,这时 parse 模块就可以排上用场。

一、urlparse

urlparse 方法是把一个完整的URL拆分成不同的组成部分,你可以根据自己的需求提取其中的某部分内容。 返回结果 ParseResult 是 namedtuple 的子类,由以下10部分组成,每部分既可以通过名字获取也可以通过下表索引得到。

详解python内置模块urllib

>>> 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'}

三、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内置模块urllib

在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'

五、unquote

unquote 是 quote 的逆向过程,称之为URL解码,解码方便开发者阅读

>>> parse.unquote("q%3D%E4%B8%AD")
'q=中'

以上就是详解python内置模块urllib的详细内容,更多关于python内置模块urllib的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 生成不重复的随机数的代码
May 15 Python
python进程类subprocess的一些操作方法例子
Nov 22 Python
浅谈python中set使用
Jun 30 Python
Python中单例模式总结
Feb 20 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
python生成器推导式用法简单示例
Oct 08 Python
numpy:找到指定元素的索引示例
Nov 26 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
python生成大写32位uuid代码
Mar 03 Python
python中for in的用法详解
Apr 17 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 #Python
python 爬取B站原视频的实例代码
Sep 09 #Python
利用Python实现Json序列化库的方法步骤
Sep 09 #Python
python之语音识别speech模块
Sep 09 #Python
python speech模块的使用方法
Sep 09 #Python
python计算auc的方法
Sep 09 #Python
详解anaconda离线安装pytorchGPU版
Sep 08 #Python
You might like
逆序二维数组插入一元素的php代码
2012/06/08 PHP
基于php无限分类的深入理解
2013/06/02 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
django-allauth入门学习和使用详解
2019/07/03 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
python 日志 logging模块详细解析
2020/03/31 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
大一自我鉴定范文
2013/10/04 职场文书
编辑硕士自荐信范文
2013/11/27 职场文书
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
商务会议邀请函
2014/01/09 职场文书
护士进修自我鉴定
2014/02/07 职场文书
同学聚会主持词
2014/03/18 职场文书
苏州园林导游词
2015/02/03 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python