详解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 实现插入排序算法
Jun 05 Python
python实现bitmap数据结构详解
Feb 17 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python选择网卡发包及接收数据包
Apr 04 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
python的slice notation的特殊用法详解
Dec 27 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
Python3 webservice接口测试代码详解
Jun 23 Python
python urllib和urllib3知识点总结
Feb 08 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获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Python实现登录接口的示例代码
2017/07/21 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
Python3常见函数range()用法详解
2019/12/30 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
一些关于MySql加速和优化的面试题
2014/01/30 面试题
销售副总经理岗位职责
2013/12/11 职场文书
劳动之星获奖感言
2014/02/01 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
六一儿童节活动总结
2014/08/27 职场文书
杨善洲观后感
2015/06/04 职场文书
导游词之大雁塔景区
2019/09/17 职场文书