html.fromstring()和etree.fromstring()生成的树的差异

时间:2019-06-20 18:06:01

标签: xpath lxml

对这两种方法的效果有些困惑。这是一个简单的字符串:

test = """
   <p> This is my head <h1>  this is my middle </h1> and this is my tail.</p>    
"""

我们使用此字符串创建两个根:

from lxml import html, etree

root_e = etree.fromstring(test)
root_h = html.fromstring(test)

让我们看看树木的样子:

tree_e = etree.ElementTree(root_e)

for elem in root_e.iter():
   print(tree_e.getpath(elem))

输出为:

/p
/p/h1

这是我所期望的。但是使用:

tree_h = etree.ElementTree(root_h)

for elem in root_h.iter():
    print(tree_h.getpath(elem))

现在输出为:

   /html/div
   /div/p
   /div/h1

我没想到。随之而来的是奇怪的后果。各种xpath表达式在两棵树中的工作方式相同,但其他的则不同。例如

root_h.xpath('/html/div')[0].text_content()

输出整个字符串文本(带有换行符),尽管test中既没有html也没有div。另一方面,

root_h.xpath('/html/div')[0].text

什么都不做。

那为什么要区别,以及什么时候应该使用其中一个?

0 个答案:

没有答案
相关问题