Python 在字符串中处理html 和xml

枫铃3年前 (2021-09-30)Python210

问题:

想将HTML 或者XML 实体如&entity;&#code; 替换为对应的文本。再者,你需要转换文本中特定的字符(比如<, >, 或&)。

解决方案:

1.想替换文本字符串中的< 或者> ,使用html.escape() 函数可以很容易的完成。

>>> s = 'Elements are written as "<tag>text</tag>".'
>>> import html
>>> print(s)
Elements are written as "<tag>text</tag>".
>>> print(html.escape(s))
Elements are written as "<tag>text</tag>".
>>> # Disable escaping of quotes
>>> print(html.escape(s, quote=False))
Elements are written as "<tag>text</tag>".

2.想将非ASCII 文本对应的编码实体嵌入进去,可以给某些I/O 函数传递参数errors='xmlcharrefreplace'来达到这个目。

>>> s = 'Spicy Jalapeño'
>>> s.encode('ascii', errors='xmlcharrefreplace')
b'Spicy Jalapeño'
>>>

3.为了替换文本中的编码实体,你需要使用另外一种方法。如果你正在处理HTML或者XML 文本,试着先使用一个合适的HTML 或者XML 解析器。通常情况下,这些工具会自动替换这些编码值,你无需担心。有时候,如果你接收到了一些含有编码值的原始文本,需要手动去做替换,通常你只需要使用HTML 或者XML 解析器的一些相关工具函数/方法即可。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> s = 'Spicy "Jalapeño&quot.'
>>> from html.parser import HTMLParser
>>> p = HTMLParser()
>>> p.unescape(s)
'Spicy "Jalapeño".'
>>>
>>> t = 'The prompt is >>>'
>>> from xml.sax.saxutils import unescape
>>> unescape(t)
'The prompt is >>>'
>>>

4.在生成HTML 或者XML 文本的时候,如果正确的转换特殊标记字符是一个很容易被忽视的细节。特别是当你使用print() 函数或者其他字符串格式化来产生输出的时候。使用像html.escape()的工具函数可以很容易的解决这类问题。如果你想以其他方式处理文本, 还有一些其他的工具函数比如xml.sax.saxutils.unescapge() 可以帮助你。然而,你应该先调研清楚怎样使用一个合适的解析器。比如,如果你在处理HTML 或XML 文本,使用某个解析模块比如html.parsexml.etree.ElementTree 已经帮你自动处理了相关的替换细节。

相关文章

Python中read()、readline()和readlines()三者间的区别和用法

众所周知在python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们...

Python D6 if分支结构

Python D6 if分支结构

Pycharm快捷键 tips: 单行注释 Ctrl+/ 多行注释 Ctrl +Shift+/ Python语...

python3输入的input()坑

如下所示:...

Python抓取网页数据的终极办法

Python抓取网页数据的终极办法

假设你在网上搜索某个项目所需的原始数据,但坏消息是数据存在于网页中,并且没有可用于获取原始数据的API。 所以现在你必须浪费30...

Python 下载的九种方法

前言 使用脚本进行下载...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。