详解用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使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
浅谈python中set使用
Jun 30 Python
python开发利器之ulipad的使用实践
Mar 16 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
django自带的权限管理Permission用法说明
May 13 Python
python如何快速生成时间戳
Jul 21 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
jcrop基本参数一览
2013/07/16 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
python实现简单神经网络算法
2018/03/10 Python
Python函数参数操作详解
2018/08/03 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
flask项目集成swagger的方法
2020/12/09 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
世界最大的票务市场:viagogo
2017/02/16 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
物理系毕业生自荐书范文
2014/02/22 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
小学体育课教学反思
2016/02/16 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技