Я изо всех сил пытаюсь понять части библиотеки lxml для python.
Возьмите следующий 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»?