Я полагаю, что ваша программа столкнется с множеством проблем при манипулировании входными данными - что если изменится регистр 'title' или произойдет опечатка?
В действительности это невозможнопринять строгое решение для очистки чужого сайта, так как они могут без предварительного уведомления полностью изменить все.Обычно лучше написать толерантный и гибкий код, который, по крайней мере, пытается проверить, что его вывод является нормальным.В этом случае, вероятно, лучше всего перебрать результаты '// table / tr', затем внутри этого цикла обработать элементы td:
import lxml.etree
tree = lxml.etree.fromstring("<table><tr><td>test</td></tr><tr><td><div>test2</div></td></tr></table>")
stringify = lambda x : "".join(x.xpath(".//text()"))
for x in tree.xpath("//table/tr"):
print "New row"
for y in x.xpath("td"):
print stringify(y)
Вывод:
New row
test
New row
test2
Следующий код, однако, получит список, который вы запрашиваете:
print map(stringify, tree.xpath("//table/tr/td"))
Вывод:
['test', 'test2']
Это найдет все текстовые элементы, которые вообще происходят от td, который являетсяпрямой потомок tr, который, в свою очередь, является прямым потомком таблицы.
(Простой запрос всех элементов text () создаст несколько забавных ошибок при работе с HTML, который содержит «
Foo * 1018»).* бар "или аналогичный.)