专栏首页python前行者[889]python处理HTML转义字符

[889]python处理HTML转义字符

抓网页数据经常遇到例如>或者 这种HTML转义符

什么是转义字符

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

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

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 模块新增了unescapeescape方法。

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

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

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

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

汇总6种方法转换

# -*- coding: utf-8 -*-

text = '&lt;abc&gt;'
text2 = '<abc>'

from bs4 import BeautifulSoup

print('----------------------bs4转义为正常字符----------------------------------')
soup = BeautifulSoup(text, features="html.parser")
print(soup.text)# <abc>


from lxml import etree

print('----------------------lxml转义为正常字符----------------------------------')
html=etree.HTML(text)
# 使用xpath获取content中的所有字符串
print(html.xpath("string(.)"))# <abc>


from html.parser import HTMLParser

print('----------------------html.parser转义为正常字符----------------------------------')
html_parser = HTMLParser()
text3 = html_parser.unescape(text)
print(text3)# <abc>


import html

print('----------------------html方法转义为正常字符----------------------------------')
text3=html.unescape(text)
print(text3) # <abc>
print('----------------------html方法转义为html字符----------------------------------')
text4=html.escape(text2)
print(text4) # &lt;abc&gt;


from xml.sax.saxutils import unescape,escape

print('----------------------xml.sax.saxutils转义为正常字符------------------------')
text3=unescape(text)
print(text3)# <abc>
print('----------------------xml.sax.saxutils转义为html字符------------------------')
text4=escape(text2)
print(text4) # &lt;abc&gt;


import cgi

print('----------------------cgi转义为html字符----------------------------------')
text3 = cgi.escape(text2)
print(text3)# &lt;abc&gt;

参考:https://www.cnblogs.com/xuxn/archive/2011/08/12/parse-html-escape-characters-in-python.html https://blog.csdn.net/zhusongziye/article/details/78786519 https://www.cnblogs.com/du-jun/p/10345067.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [709]python之pywifi

    这一步需要使用tkinter模块,这是python自带的图形界面库,通过import tkinter调用使用就可以了,代码中set_init_window函数就...

    周小董
  • Numpy.random中shuffle与permutation的区别

    函数shuffle与permutation都是对原来的数组进行重新洗牌(即随机打乱原来的元素顺序);区别在于shuffle直接在原来的数组上进行操作,改变原来数...

    周小董
  • python selenium-webdriver 元素操作之键盘操作

    selenium 提供了比较完整的键盘操作,在使用的模拟键盘操作之前需要我们导入from selenium.webdriver.common.keys impo...

    周小董
  • 中山大学的学霸小哥开源了一个能帮你做高数题的AI

    中山大学的一名叫mathAI的硕士学霸小哥在GitHub上开源了一个拍照做题神器火了。

    华章科技
  • 麻省理工科研人员开发出新型人脸识别算法

    美国麻省理工学院网站发布消息称,该校科研人员开发出了一种新的人脸识别算法,这是一种新的基于人脑面部识别机制的计算模型,似乎能够捕获被现有模型忽略的一些人类神经学...

    人工智能快报
  • 浅谈SQL盲注测试方法解析与技巧

    本文所有实战盲注例子,均来自Joomla! 3.7.0 - ‘com_fields’ SQL Injection。(提示:本文所有外链阅读原文即可查看)

    FB客服
  • React中state render到html dom 的流程分析

    作者:xieyu React 中 state render 到 html dom 的流程分析Questions React 的 component的 lifec...

    企鹅号小编
  • Go 每日一库之 wire

    之前的一篇文章Go 每日一库之 dig介绍了 uber 开源的依赖注入框架dig。读了这篇文章后,@overtalk推荐了 Google 开源的wire工具。所...

    用户7731323
  • 零基础Python教程-详说list有序集合

    变量classmates就是一个list。用len()函数可以获得list元素的个数:

    小小科
  • 零基础Python教程-详说list有序集合

    ist是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出你周围同事的名字,就可以用一个list表示: >>> classmates = ['Micha...

    小小科

扫码关注云+社区

领取腾讯云代金券