详解用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实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 Python
python的socket编程入门
Jan 29 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 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/10/09 PHP
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
在Django的视图中使用数据库查询的方法
2015/07/16 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python map比for循环快在哪
2020/09/21 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
使用html5制作loading图的示例
2014/04/14 HTML / CSS
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
学院书画协会部门岗位职责
2013/12/01 职场文书
化学教育专业自荐信
2014/07/04 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android