我正在努力了解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()')
似乎返回与上面完全相同的列表。但是,
elements[0].tag
返回“ li”,因此每个元素似乎都有一些有关其来源的记录。
问题:理想情况下,我希望能够分别访问html文档中的每个列表成员,并将xpath传递给每个成员。这样有可能吗?每个“元素li”实际上包含什么信息?
答案 0 :(得分:2)
elements[0].xpath('//text()')
在给定的HTML DOM中返回所有个文本节点。要获取elements[0]
的后代文本节点,您需要以点(context node)开始XPath:
elements[0].xpath('.//text()')