Я хочу извлечь некоторые элементы HTML с помощью python3 и парсера HTML, предоставленного lxml.
Рассмотрим этот HTML:
<!DOCTYPE html>
<html>
<body>
<span class="foo">
<span class="bar">bar</span>
foo
</span>
</body>
</html>
Рассмотрим эту программу:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from lxml import html
tree = html.fromstring('html from above')
bars = tree.xpath("//span[@class='bar']")
print(bars)
print(html.tostring(bars[0], encoding="unicode"))
В браузере селектор запросов span.bar выбирает только элемент span. Это то, чего я желаю. Однако приведенная выше программа производит:
[<Element span at 0x7f5dd89a4048>]
<span class="bar">bar</span>foo
Похоже, мой XPath на самом деле не ведет себя как селектор запросов, и текстовый узел-брат выбирается рядом с элементом span. Как мне настроить XPath, чтобы выбрать только элемент bar, но не текст «foo»?