如何从lxml的HtmlElement获取未解析转义的原始文本?
解决lxml提取原始转义文本的问题
方法一:解析后重新转义文本
lxml默认会自动解析HTML实体,直接获取text得到的是解析后的字符。可以用Python标准库的html.escape()将解析后的字符转义回原始实体格式:
import html from lxml import html as lxml_html thing = lxml_html.fromstring("<code>&lt;div&gt;</code>") original_text = html.escape(thing.text) print(original_text) # 输出:&lt;div&gt;
方法二:解析时禁用实体解析
创建HTML解析器时设置resolve_entities=False,让lxml保留原始的实体字符串,无需后续转义操作:
from lxml import html from lxml.etree import HTMLParser parser = HTMLParser(resolve_entities=False) thing = html.fromstring("<code>&lt;div&gt;</code>", parser=parser) print(thing.text) # 输出:&lt;div&gt;
补充:处理tostring的标签问题(不推荐)
如果一定要使用tostring,可以通过字符串处理去掉首尾的<code>标签,但这种方法不够健壮(比如标签带有属性时会失效):
from lxml import html thing = html.fromstring("<code>&lt;div&gt;</code>") raw_content = html.tostring(thing, encoding='unicode').strip('<code></code>') print(raw_content) # 输出:&lt;div&gt;
内容的提问来源于stack exchange,提问作者erobson
相关产品推荐
相关产品推荐

