详解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 31 Python
实例讲解python中的序列化知识点
Oct 08 Python
python按照多个条件排序的方法
Feb 08 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
python3.7 sys模块的具体使用
Jul 22 Python
django的model操作汇整详解
Jul 26 Python
Python sorted排序方法如何实现
Mar 31 Python
python爬虫实例之获取动漫截图
May 31 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
python - timeit 时间模块
Apr 06 Python
你需要掌握的20个Python常用技巧
Feb 28 Python
python图像处理 PIL Image操作实例
Apr 09 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和ACCESS写聊天室(七)
2006/10/09 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
jquery json 实例代码
2010/12/02 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Django框架多表查询实例分析
2018/07/04 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
爱情保证书范文
2014/02/01 职场文书
三方协议书范本
2014/04/22 职场文书
运动会口号16字
2014/06/07 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2015年人事科工作总结
2015/04/28 职场文书
写给老师的保证书
2015/05/09 职场文书
让子弹飞观后感
2015/06/11 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
Python函数式编程中itertools模块详解
2021/09/15 Python