用 Python 处理 HTML 转义字符的5种方式

原创 2017年12月11日 00:00:00

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

Photo by Ahmed Saffu on Unsplash


写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 JSON 格式,有 XML 文档,不过大部分还是 HTML 文档,HTML 经常会混杂有转移字符,这些字符我们需要把它转义成真正的字符。

什么是转义字符

在 HTML 中 <>& 等字符有特殊含义(<,> 用于标签中,& 用于转义),他们不能在 HTML 代码中直接使用,如果要在网页中显示这些符号,就需要使用 HTML 的转义字符串(Escape Sequence),例如 < 的转义字符是 &lt;,浏览器渲染 HTML 页面时,会自动把转移字符串换成真实字符。

转义字符(Escape Sequence)由三部分组成:第一部分是一个 & 符号,第二部分是实体(Entity)名字,第三部分是一个分号。 比如,要显示小于号(<),就可以写&lt;

0?wx_fmt=png

Python 反转义字符串

用 Python 来处理转义字符串有多种方式,而且 py2 和 py3 中处理方式不一样,在 python2 中,反转义串的模块是 HTMLParser

# python2
import HTMLParser
>>> HTMLParser().unescape('a=1&amp;b=2')
'a=1&b=2'

Python3 把 HTMLParser 模块迁移到 html.parser

# python3
>>> from html.parser import HTMLParser
>>> HTMLParser().unescape('a=1&amp;b=2')
'a=1&b=2'

到 python3.4 之后的版本,在 html 模块新增了 unescape 方法。

# python3.4
>>> import html
>>> html.unescape('a=1&amp;b=2')
'a=1&b=2'

推荐最后一种写法,因为 HTMLParser.unescape 方法在 Python3.4 就已经被废弃掉不推荐使用,意味着之后的版本有可能会被彻底移除。

另外,sax 模块也有支持反转义的函数

>>> from xml.sax.saxutils import unescape
>>> unescape('a=1&amp;b=2')
'a=1&b=2'

当然,你完全可以实现自己的反转义功能,不复杂,当然,我们崇尚不重复造轮子。


推荐阅读:

 


关注Python之禅,学点Python
640?wx_fmt=jpeg

版权声明:本文为博主原创文章,未经博主允许不得转载。

用Python处理HTML转义字符的5种方式

写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 JSON 格式,有 XML 文档,不过大部分还是 HTML 文档,HTML 经常会混杂有...
  • zhusongziye
  • zhusongziye
  • 2017年12月12日 21:48
  • 311

html中转义字符的处理 前端和后端两种处理方式

1.apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,x...
  • yuanyuan214365
  • yuanyuan214365
  • 2017年01月11日 21:37
  • 2943

用Javascript(js)进行HTML转义工具(处理特殊字符显示)

众所周知页面上的字符内容通常都需要进行HTML转义才能正确显示,尤其对于Input,Textarea提交的内容,更是要进行转义以防止javascript注入攻击。   通常的HTML转义主要是针...
  • hj7jay
  • hj7jay
  • 2016年04月29日 11:20
  • 10270

HTML转义字符大全

ISO Latin-1字符集:  — 制表符Horizontal tab  — 换行Line feed  — 回车Carriage Return  ...
  • z1012890225
  • z1012890225
  • 2016年07月22日 17:26
  • 1347

HTML字符实体,转义字符串

HTML字符实体(Character Entities),转义字符串(Escape Sequence) 目录 为什么要用转义字符串? 转义字符串的组成 如何显示空格? HTML特殊转...
  • oldguncm
  • oldguncm
  • 2015年10月19日 20:31
  • 1038

【钱柜娱乐开户】html转义字符

1、首先列下一些基本的html转义字符   特殊字符 字符 十进制 转义字符 “ " " & ...
  • TT5267621
  • TT5267621
  • 2016年04月21日 13:48
  • 6281

html转义字符

ISO Latin-1字符集:  — 制表符Horizontal tab  — 换行Line feed  — 回车Carriage Return  — ...
  • liyonghui_2013li
  • liyonghui_2013li
  • 2016年07月16日 10:46
  • 1375

JS对HTML字符的转义和反转义

首先,奉上工具类: var HtmlUtil = { /*1.用浏览器内部转换器实现html转码*/ htmlEncode:function (html){ ...
  • u013026207
  • u013026207
  • 2017年01月03日 14:14
  • 4952

<转载>HTMl转义字符大全

今天在写html做笔记的时候,遇到了尖括号不能显示的问题,后来想到了这是html里面定义好的,于是到网上找转义字符,看到一篇文章,挺全的,转载过来记录。 1.常用转义字符 转义...
  • u014477038
  • u014477038
  • 2016年02月17日 13:35
  • 3773

将字符串中的html转义字符转换为字符

背景: 解析web的源文件时,发现文本节点的text中有转义字符,比如 Oil & Gas test,其中&对应的字符为&。 那么为了获得正确的text,所以就需要对该text中的...
  • shaojunbo24
  • shaojunbo24
  • 2015年07月08日 10:16
  • 821
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用 Python 处理 HTML 转义字符的5种方式
举报原因:
原因补充:

(最多只允许输入30个字)