详解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中的多重继承
Apr 28 Python
python从入门到精通(DAY 3)
Dec 20 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
Jan 29 Python
解决Django生产环境无法加载静态文件问题的解决
Apr 23 Python
python使用threading.Condition交替打印两个字符
May 07 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
python实现爬取百度图片的方法示例
Jul 06 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Python OpenCV读取显示视频的方法示例
Feb 20 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
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
jquery图片切换插件
2015/03/16 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
django 自定义用户user模型的三种方法
2014/11/18 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Python中的__init__作用是什么
2020/06/09 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
软件测试面试题
2015/10/21 面试题
新教师岗前培训方案
2014/06/05 职场文书
长征观后感
2015/06/09 职场文书
酒店开业主持词
2015/07/02 职场文书
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
浅谈MySQL函数
2021/10/05 MySQL
Golang中channel的原理解读(推荐)
2021/10/16 Golang
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL