【发布时间】:2015-05-04 19:11:46
【问题描述】:
当使用 python/lxml 解析 HTML 时,我想检索 html 元素的实际属性文本,但相反,我得到了带有已解析实体的属性文本。也就是说,如果实际属性
读取this & that,我回复this & that。
有没有办法获取未解析的属性值? 这是一些显示我的问题的示例代码,使用 python2.7 和 lxml 3.2.1
from lxml import etree
s = '<html><body><a alt="hi & there">a link</a></body></html>'
parser = etree.HTMLParser()
tree = etree.fromstring(s, parser=parser)
anc = tree.xpath('//a')
a = anc[0]
a.get('alt')
'hi & there'
a.attrib.get('alt')
'hi & there'
etree.tostring(a)
'<a alt="hi & there">a link</a>'
我想得到实际的字符串hi &amp; there。
【问题讨论】:
-
cgi.escape(a.attrib.get('alt'))
-
我想要的是一种让 lxml 不改变文本的方法; cgi.escape 将通过用实体替换 & 来转义(例如),但即使它是 unescape(用 & 替换实体),我想要的是实际文本,因为它存在于通常未知的 HTML 源中。
-
你需要构建一个自定义解析器。也许您可以继承 HTMLParser 并覆盖您想要的文本位的解析。
标签: python html python-2.7 lxml