将 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()')
我很难理解 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):
elements[0].xpath('.//text()')