详解用Python处理HTML转义字符的5种方式
作者:liuzhijun 发布时间:2021-01-27 20:53:17
写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 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'
当然,你完全可以实现自己的反转义功能,也不复杂,当然,我们崇尚不重复造轮子。
来源:https://foofish.net/pycon-html-escape.html
猜你喜欢
- 1.sys模块sys模块的常见函数列表:sys.argv: 实现从程序外部向程序传递参数。sys.exit([arg]): 程序中间的退出,
- 众所周知,Python 支持多种编程范式:过程式(使用基础的语句)、面向对象编程和函数式编程。Python 也提供了其他函数式编程语言的工具
- 以下为谷歌国际少年绘画大赛,小学1-3年级作品。看孩子们的logo创意,自愧呀! 彩色世界我们热爱温暖的阳光,“O”代表我们心中的太阳。我们
- 当使用MySQL做站点的时候,肯定会有不知道的错误发生,怎么记录呢?以下是具体解决方法:class.method &n
- 一、环境准备python3.6.7Pycharm二、创建项目我这里是在Django项目中新建了个APP,目录结构如下图所示:那么怎么在已有的
- 快到 520 了,分享几段 520 专属 Python 代码,不多说了,下面直接上货。No.1效果:主要代码:import tur
- 常用的 random 模块方法import random# random.random()用于生成一个 0 到 1 的随机浮点数: 0 &l
- 1.函数array() 功能:创建一个数组变量 格式:array(list) 参数:list为数组变量中的每个数值列,中间用逗号间隔 例子:
- Dataframe使用loc取某几行几列的数据:print(df.loc[0:4,['item_price_level',&
- 继续Mootools常用方法扩展,依然还是String类的扩展。方法:format说明:一个非常简单的format方法,和C#
- instanceof 运算符 和 is_a() 方法都是判断:某对象是否属于该类 或 该类是此对象的父类(用于确定一个 PHP 变量是否属于
- 有的时候,一个 if … else … 还不够用。比如,根据年龄的划分:条件1:18岁或以上:adult条件2:6岁或以上:teenager
- 使用 substring()或者slice() 函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str=
- 背景写代码的时候,你会发现你的代码越写越多。然而,功能需要也越来越多,然后你的冗余代码就多得不能再多了~~~怎么办,我太难了。那就寻求一些高
- 简介在php中,类型的继承使用extends关键字,而且最多只能继承一个父类,php不支持多继承。class MyClass {
- 数据挖掘查询任务根据 Analysis Services 内置的数据挖掘模型运行预测查询。预测查询通过使用挖掘模型来创建对新数据的预测。例如
- 除了第一年外,谷歌每年母亲节都会更换主页的logo以向全世界的母亲致敬。虽然2000年和2001年母亲节的logo图片看起来没什么不同,但是
- 前端开发中两个很不错的小技巧, CSS三角形与圆角背景. 的确, 它们都可以通过图片来实现, 但, 抛开用代码实现可以减小图片加载量不说,
- ASCII码键盘ASCII 码键盘ASCII 码键盘ASCII 码键盘27ESC32SPACE33!34"35#36$37%38&
- 与Channel区别Channel能够很好的帮助我们控制并发,但是在开发习惯上与显示的表达不太相同,所以在Go语言中可以利用sync包中的W