详解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 装饰器功能以及函数参数使用介绍
Jan 27 Python
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
python通过urllib2获取带有中文参数url内容的方法
Mar 13 Python
替换python字典中的key值方法
Jul 06 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 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 gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
itchat接口使用示例
2017/10/23 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python爬虫基础知识点整理
2020/06/02 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Python try except else使用详解
2021/01/12 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
某公司部分笔试题
2013/11/05 面试题
音乐教学案例
2014/01/30 职场文书
现场施工员岗位职责
2015/04/11 职场文书
财务统计员岗位职责
2015/04/14 职场文书
预备党员考察意见范文
2015/06/01 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python