详解用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 26 Python
自己使用总结Python程序代码片段
Jun 02 Python
Python的面向对象编程方式学习笔记
Jul 12 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
Python绘制3D图形
May 03 Python
python实现比较文件内容异同
Jun 22 Python
详解Python3的TFTP文件传输
Jun 26 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 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 Socket写的POP3类
2013/10/30 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
php自定义错误处理用法实例
2015/03/20 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
php session 写入数据库
2016/02/13 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
微信小程序自定义联系人弹窗
2020/05/26 Javascript
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
python 字符串追加实例
2019/07/20 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
JavaScript实现简单拖拽效果
2021/09/15 Javascript
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android