详解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中 ? : 三元表达式的使用介绍
Oct 09 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
python写日志文件操作类与应用示例
Jul 01 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
python如何将两个txt文件内容合并
Oct 18 Python
python如何基于redis实现ip代理池
Jan 17 Python
python3.5的包存放的具体路径
Aug 16 Python
python requests库的使用
Jan 06 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 Python
Python基本知识点总结
Apr 07 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下常用正则表达式整理
2010/10/26 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP中Array相关函数简介
2016/07/03 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
Python获取任意xml节点值的方法
2015/05/05 Python
深入学习Python中的装饰器使用
2016/06/20 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
大学生职业生涯规划书模板
2014/01/18 职场文书
《自然之道》教学反思
2014/02/11 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
会议邀请函
2015/01/30 职场文书
医生个人年终总结
2015/02/28 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby