详解用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 实现插入排序算法
Jun 05 Python
web.py在模板中输出美元符号的方法
Aug 26 Python
浅析Python多线程下的变量问题
Apr 28 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
简单实现python数独游戏
Mar 30 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
Django与pyecharts结合的实例代码
May 13 Python
python3 循环读取excel文件并写入json操作
Jul 14 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
PHP经典的给图片加水印程序
2006/12/06 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
深入php之规范编程命名小结
2013/05/15 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
php生成二维码
2015/08/10 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
js中parseInt函数浅谈
2013/07/31 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python+django加载静态网页模板解析
2017/12/12 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
python常用函数与用法示例
2019/07/02 Python
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
环保建议书300字
2014/05/14 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
大学学生会竞选稿
2015/11/19 职场文书