上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 "Jalapeño".' print(html.unescape(test_str)) text = 'The prompt is >>>' from xml.sax.saxutils import unescape unescape(text)
在生成HTML或者XML文本的时候,如何正确地转换特殊标记字符是一个容易被忽视的细节,特别是当使用print()函数或者其他字符串格式化方法来产生输出的时候。此时,使用html.escape()函数可以很容易地解决这类问题。
若想以其他方式处理文本,还可以使用其他工具函数,比如xml.sax.saxutils.unescapge(),不过应该先调研清楚怎样使用一个合适的解析器再做选择。比如,在处理HTML或XML文本时,使用某个解析模块比如html.parse或xml.etree.ElementTree可以帮助自动处理一些相关的替换细节。