详解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之print详解
Sep 28 Python
Python 的 Socket 编程
Mar 24 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
Python 中@property的用法详解
Jan 15 Python
python实现飞行棋游戏
Feb 05 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
python模拟实现分发扑克牌
Apr 22 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
Python Django路径配置实现过程解析
Nov 05 Python
Python采集壁纸并实现炫轮播
Apr 30 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
mysq GBKl乱码
2006/11/28 PHP
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php加密解密字符串示例
2016/10/13 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
python zip文件 压缩
2008/12/24 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
Django分页功能的实现代码详解
2019/07/29 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
Python笔记之观察者模式
2019/11/20 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
餐饮业员工工作决心书
2014/03/11 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android