详解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基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
对Python中type打开文件的方式介绍
Apr 28 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python利用7z批量解压rar的实现
Aug 07 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
Python reduce函数作用及实例解析
May 08 Python
使用AJAX和Django获取数据的方法实例
Oct 25 Python
pytorch中的model.eval()和BN层的使用
May 22 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
珊瑚虫IP库浅析
2007/02/15 PHP
PHP操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
php读取mysql的简单实例
2014/01/15 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
node.js中的console.time方法使用说明
2014/12/09 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
javascript回调函数详解
2018/02/06 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python中list初始化方法示例
2016/09/18 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
Python 元组操作总结
2019/09/18 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
简单介绍Object类的功能、常用方法
2013/10/02 面试题
机械设计及其自动化专业求职信
2014/06/09 职场文书
个人四风对照检查材料
2014/09/26 职场文书
2014年就业工作总结
2014/11/26 职场文书
三潭印月的导游词
2015/02/12 职场文书
植物园观后感
2015/06/11 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
TypeScript实用技巧 Nominal Typing名义类型详解
2022/09/23 Javascript