Привет всем.
Мне необходимо получить текст всех элементов <p> из html-документа.
Функция xpath_text('//p') возвращает только первый абзац. А как вернуть текст всех абзацев?
Спасибо.
import lxml.html >>> doc = lxml.html.fromstring(open('html.htm').read()) >>> p = doc.xpath("//p") >>> map(lambda x: x.text_content(), p)
tfox
Спасибо. А нет ли более простого решения? Здесь уже пошло функциональное программирование. Может быть есть функция которая вернет не первый узел, а все узлы?В документации XPath написано: “P” - вернет все элементы PНо функция xpath_text(“p”) - возвращает ошибку, она работает только с таким аргументом xpath_text(“//p”) и возвращает при этом только первый элемент “p”.
map(lambda x: x.text(), p)
adrayИз библиотеки Grab. Сайт библиотеки: http://grablib.org/
из какой библиотеки функция xpath_text?
adrayПонял.
xpath_list из grab делает тоже самое, что и xpath из lxml.html
xpath_text('//p') - возвращает первый элемент
xpath_text('//p[2]') -возвращает второй элемент
xpath_text('//p[last()]') - возвращает последний элемент
xpath_text('//p[all()]') - жаль, что такой функции просто не существует


//text()[ancestor::p]
bwесть. это выражение в возвращает все элементы <p>//text()[ancestor::p]
