详解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开发利器之ulipad的使用实践
Mar 16 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
手把手教你Python yLab的绘制折线图的画法
Oct 23 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 Python
python实现图片转字符画的完整代码
Feb 21 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 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实现图片简单上传
2006/10/09 PHP
php结合表单实现一些简单功能的例子
2011/06/04 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
JS常用函数使用指南
2014/11/23 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python实现windows倒计时锁屏功能
2019/07/30 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python之字典对象的几种创建方法
2020/09/30 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
Final类有什么特点
2012/04/25 面试题
九州传奇上机题
2014/07/10 面试题
求职自荐信怎么写
2014/03/06 职场文书
初中班主任评语大全
2014/04/24 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
2014年教研员工作总结
2014/12/23 职场文书
打架检讨书
2015/01/27 职场文书
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技