详解用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进行数据科学工作的简单入门教程
Apr 01 Python
基于python 字符编码的理解
Sep 02 Python
Python封装原理与实现方法详解
Aug 28 Python
Python中反射和描述器总结
Sep 23 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
python绘制多个子图的实例
Jul 07 Python
python应用文件读取与登录注册功能
Sep 23 Python
python实现银行管理系统
Oct 25 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 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
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
Linux中为php配置伪静态
2014/12/17 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python实现五子棋小游戏
2020/03/25 Python
python文字转语音实现过程解析
2019/11/12 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
python 19个值得学习的编程技巧
2020/08/15 Python
Python使用xpath实现图片爬取
2020/09/16 Python
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
Java面试笔试题大全
2016/11/23 面试题
教师节表彰会主持词
2015/07/06 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书