Python进阶编程:编写更高效、优雅的Python代码
上QQ阅读APP看书,第一时间看更新

2.2.8 处理HTML和XML文本

在处理Web相关业务,特别是处理网页文本时,经常需要将HTML或者XML实体如&entity或&#code替换为对应的文本,或需要转换文本中特定的字符(比如<、>或&)。

如果想替换文本字符串中的“<”或者“>”,可使用html.escape()函数实现,示例如下:


test_str = 'Elements are written as "<tag>text</tag>".'
import html
print(test_str)

print(html.escape(test_str))
print(html.escape(test_str, quote=False))

如果正在处理的是ASCII文本,并且想将非ASCII文本对应的编码实体嵌入ASCII文本,可以给某些I/O函数传递参数errors='xmlcharrefreplace'来达到目的,示例如下:


test_str = 'Spicy Jalapeño'
print(test_str.encode('ascii', errors='xmlcharrefreplace'))

为了替换文本中的编码实体,需要使用另外一种方法。如果正在处理的是HTML或者XML文本,试着先使用一个合适的HTML或者XML解析器。通常情况下,这些工具会自动替换这些编码值。

如果接收到一些含有编码值的原始文本,需要手动去做替换,通常只需要使用HTML或者XML解析器的一些相关工具函数/方法,示例如下:


test_str = 'Spicy &quot;Jalape&#241;o&quot.'
print(html.unescape(test_str))

text = 'The prompt is &gt;&gt;&gt;'
from xml.sax.saxutils import unescape
unescape(text)

在生成HTML或者XML文本的时候,如何正确地转换特殊标记字符是一个容易被忽视的细节,特别是当使用print()函数或者其他字符串格式化方法来产生输出的时候。此时,使用html.escape()函数可以很容易地解决这类问题。

若想以其他方式处理文本,还可以使用其他工具函数,比如xml.sax.saxutils.unescapge(),不过应该先调研清楚怎样使用一个合适的解析器再做选择。比如,在处理HTML或XML文本时,使用某个解析模块比如html.parse或xml.etree.ElementTree可以帮助自动处理一些相关的替换细节。