详解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中用get()方法获取字典键值的教程
May 21 Python
批量获取及验证HTTP代理的Python脚本
Apr 23 Python
python 中的int()函数怎么用
Oct 17 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
python实现扫描日志关键字的示例
Apr 28 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
浅谈利用numpy对矩阵进行归一化处理的方法
Jul 11 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
python判断一个变量是否已经设置的方法
Aug 13 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 zend 相对路径问题
2009/01/12 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
js微信支付实现代码
2016/12/22 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
作文评语大全
2014/04/23 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
2015年妇女工作总结
2015/05/14 职场文书
学困生转化工作总结
2015/08/13 职场文书
导游词之无锡梅园
2019/11/28 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
Python爬虫之爬取二手房信息
2021/04/27 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
千万级用户系统SQL调优实战分享
2022/03/03 MySQL