将 xpath 表达式传递给 xpath 结果

Passing an xpath expression to an xpath result

我很难理解 python 的部分 lxml 库。

取下面的html文件,sample.html.

<div class="team">
    <ul class="team-members">
        <li class="team-member">
                <span class="team-member-name">John Doe</span>
                <span class="team-member-age">30</span>
            </li>
        <li class="team-member">
                <span class="team-member-name">Jane Doe</span>
                <span class="team-member-age">32</span>
            </li>
        </ul>
    </div>
<div class="team">
    <ul class="team-members">
        <li class="team-member">
                <span class="team-member-name">Joe Smith</span>
                <span class="team-member-age">28</span>
            </li>
        <li class="team-member">
                <span class="team-member-name">Jill Smith</span>
                <span class="team-member-age">41</span>
            </li>
        </ul>
    </div>

我可以将此 html 导入到 lxml 树中:

from lxml import html

file = open("sample.html",'r')
sample = file.read()

tree = html.fromstring(sample)

然后我可以使用 xpath 获取 html 中所有文本原子的列表,如下所示:

tree.xpath('//text()')

当我像下面这样传递 xpath 时,我的问题出现了:

elements = tree.xpath("//li")

打印元素产量

[<Element li at 0x48be638>,
 <Element li at 0x48be9f8>,
 <Element li at 0x48beb88>,
 <Element li at 0x48bec78>]

我可以将 xpath 传递给其中的每一个,但每一个的行为都与原始树一样!例如,

elements[0].xpath('//text()')

出现在 return 与上面的列表完全相同。然而,

elements[0].tag

returns 'li',所以每个元素似乎都有一些关于它来自哪里的记录。

问题: 理想情况下,我希望能够单独访问 html 文档中的每个列表成员,并向每个成员传递一个 xpath。这样的事情可能吗?每个 'Element li' 实际包含什么信息?

elements[0].xpath('//text()') returns 所有 个文本节点在给定 HTML DOM 中。要获取 elements[0] 的后代文本节点,您需要以点 (context node):

开始 XPath
elements[0].xpath('.//text()')