详解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中的struct模块
Apr 28 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
python编程培训 python培训靠谱吗
Jan 17 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
Python 导入文件过程图解
Oct 15 Python
如何给Python代码进行加密
Jan 10 Python
np.dot()函数的用法详解
Jan 17 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
Pycharm激活方法及详细教程(详细且实用)
May 12 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
PHP4中session登录页面的应用
2008/07/25 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
QML实现圆环颜色选择器
2019/09/25 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
Python类成员继承重写的实现
2020/09/16 Python
Python中Selenium模块的使用详解
2020/10/09 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
卫校中专生个人自我评价
2013/09/19 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL