Хорошо, во-первых, в отношении анализа HTML: если вы следуете рекомендациям zweiterlinde и S.Lott, по крайней мере, используйте версию beautifulsoup, включенную в lxml . Таким образом, вы также сможете воспользоваться хорошим интерфейсом селектора xpath или css.
Однако я лично предпочитаю HTML-анализатор Ian Bicking, включенный в lxml .
Во-вторых, .find()
и .findall()
происходят из lxml, пытающегося быть совместимым с ElementTree, и эти два метода описаны в Поддержка XPath в ElementTree .
Эти две функции довольно просты в использовании, но они очень ограничены XPath. Я рекомендую использовать полный метод lxml xpath()
или, если вы уже знакомы с CSS, использовать метод cssselect()
.
Вот несколько примеров, когда HTML-строка анализируется следующим образом:
from lxml.html import fromstring
mySearchTree = fromstring(your_input_string)
Используя класс селектора css, ваша программа будет выглядеть примерно так:
# Find all 'a' elements inside 'tr' table rows with css selector
for a in mySearchTree.cssselect('tr a'):
print 'found "%s" link to href "%s"' % (a.text, a.get('href'))
Эквивалент с использованием метода xpath будет:
# Find all 'a' elements inside 'tr' table rows with xpath
for a in mySearchTree.xpath('.//tr/*/a'):
print 'found "%s" link to href "%s"' % (a.text, a.get('href'))