使用lxml.etree XPath解析HTML无法获取全部文本的问题求助
使用lxml解析含混合子标签的HTML时XPath无法获取全部文本
当使用lxml.etree解析HTML时,若目标标签包含不同类型的子标签(如示例中的<h3>下同时存在<span>和<p>),使用//text() XPath表达式无法获取到所有子元素的文本内容。
复现示例(含<p>标签的情况)
content = """ <h3 id="author"> <span> <a target="_blank">zhang</a> </span> <span> <a target="_blank">wang</a> </span> <p class="email">1234567@qq.com</p> <span> <a target="_blank">li</a> </span> <span> <a target="_blank">lin</a> </span> </h3> """ from lxml import etree html_tree = etree.HTML(content) print(html_tree.xpath('//h3[@id="author"]//text()'))
执行结果:
['\n ', '\n ', 'zhang', '\n ', '\n ', '\n ', 'wang', '\n ', '\n ']
结果中缺失了"li"和"lin"两段文本。
复现示例(删除<p>标签的情况)
content = """ <h3 id="author"> <span> <a target="_blank">zhang</a> </span> <span> <a target="_blank">wang</a> </span> <span> <a target="_blank">li</a> </span> <span> <a target="_blank">lin</a> </span> </h3> """ from lxml import etree html_tree = etree.HTML(content) print(html_tree.xpath('//h3[@id="author"]//text()'))
执行结果:
['\n ', '\n ', 'zhang', '\n ', '\n ', '\n ', 'wang', '\n ', '\n ', '\n ', 'li', '\n ', '\n ', '\n ', 'lin', '\n ', '\n ']
此时所有文本内容都能被正常获取。
环境信息
- Python 3.6.2
- lxml 3.8.0
内容的提问来源于stack exchange,提问作者yie1d
相关产品推荐
相关产品推荐

