详解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中的urllib模块使用详解
Jul 07 Python
Python编程中的异常处理教程
Aug 21 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
python 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
对Python 检查文件名是否规范的实例详解
Jun 10 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
PageFactory设计模式基于python实现
Apr 14 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 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 Smarty模板生成html文档的方法
2010/04/12 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
python爬虫实例详解
2018/06/19 Python
python实现动态创建类的方法分析
2019/06/25 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
大学毕业登记表自我鉴定
2013/10/09 职场文书
三年大学自我鉴定
2014/01/16 职场文书
地心历险记观后感
2015/06/15 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
python实现高效的遗传算法
2021/04/07 Python