详解用Python处理HTML转义字符的5种方式


Posted in Python onDecember 27, 2017

写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 JSON 格式,有 XML 文档,不过大部分还是 HTML 文档,HTML 经常会混杂有转移字符,这些字符我们需要把它转义成真正的字符。

什么是转义字符

在 HTML 中 <、>、& 等字符有特殊含义(<,> 用于标签中,& 用于转义),他们不能在 HTML 代码中直接使用,如果要在网页中显示这些符号,就需要使用 HTML 的转义字符串(Escape Sequence),例如 < 的转义字符是 <,浏览器渲染 HTML 页面时,会自动把转移字符串换成真实字符。

转义字符(Escape Sequence)由三部分组成:第一部分是一个 & 符号,第二部分是实体(Entity)名字,第三部分是一个分号。 比如,要显示小于号(<),就可以写< 。

显示字符 说明 转义字符
小于
空格
小于
> 大于 >
& &符号 &
" 双引号 "
© 版权 ©
® 已注册商标 ®

Python 反转义字符串

用 Python 来处理转义字符串有多种方式,而且 py2 和 py3 中处理方式不一样,在 python2 中,反转义串的模块是 HTMLParser。

# python2
import HTMLParser
>>> HTMLParser().unescape('a=1&b=2')
'a=1&b=2'

Python3 HTMLParser 模块迁移到了 html.parser

# python3
>>> from html.parser import HTMLParser
>>> HTMLParser().unescape('a=1&b=2')
'a=1&b=2'

到 python3.4 以后的版本,在 html 模块新增了 unescape 方法。

# python3.4
>>> import html
>>> html.unescape('a=1&b=2')
'a=1&b=2'

推荐最后一种写法,因为 HTMLParser.unescape 方法在 Python3.4 就已经被废弃掉不推荐使用了,意味着之后的版本会被彻底移除。

另外,sax 模块也有支持反转义的函数

>>> from xml.sax.saxutils import unescape
>>> unescape('a=1&b=2')
'a=1&b=2'

当然,你完全可以实现自己的反转义功能,也不复杂,当然,我们崇尚不重复造轮子。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中PIL安装简单教程
Apr 21 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
python通过opencv实现批量剪切图片
Nov 13 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
Django基础三之视图函数的使用方法
Jul 18 Python
Python logging设置和logger解析
Aug 28 Python
python用requests实现http请求代码实例
Oct 31 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 Python
Python中使用支持向量机(SVM)算法
Dec 26 #Python
Python中支持向量机SVM的使用方法详解
Dec 26 #Python
详解python中的 is 操作符
Dec 26 #Python
matplotlib简介,安装和简单实例代码
Dec 26 #Python
Python中xrange与yield的用法实例分析
Dec 26 #Python
Python简单计算数组元素平均值的方法示例
Dec 26 #Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 #Python
You might like
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
jquery select选中的一个小问题
2009/10/11 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
再探JavaScript作用域
2014/09/24 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
基于python 字符编码的理解
2017/09/02 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python3实现随机数
2018/06/25 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
python代码能做成软件吗
2020/07/24 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
一年级班主任寄语
2014/01/19 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
机械系毕业生求职信
2014/05/28 职场文书
设计师求职信
2014/07/01 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
学校党员对照检查材料
2014/08/28 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
学期个人工作总结
2015/02/13 职场文书
靠谱准确的求职信
2019/04/02 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python