详解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 flask 多对多表查询功能
Jun 25 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
学python安装的软件总结
Oct 12 Python
Python类反射机制使用实例解析
Dec 30 Python
opencv python如何实现图像二值化
Feb 03 Python
Python基于gevent实现高并发代码实例
May 15 Python
Python datetime 如何处理时区信息
Sep 02 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python之随机数函数的实现示例
Dec 30 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 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
简单的页面缓冲技术
2006/10/09 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
python将unicode和str互相转化的实现
2020/05/11 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
学校爱心捐款倡议书
2014/05/13 职场文书
运动会方阵口号
2014/06/07 职场文书
简单租房协议书范本
2014/08/20 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
python解析json数据
2022/04/29 Python