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


Отредактировано tfox (Ноя. 4, 2012 13:41:50)
Офлайн
20
//text()[ancestor::p]
Отредактировано bw (Ноя. 4, 2012 14:29:58)
Офлайн
0
bwесть. это выражение в возвращает все элементы <p>//text()[ancestor::p]

Отредактировано tfox (Ноя. 4, 2012 15:54:16)
Офлайн
20
>>> help(str.join)
..bw
Офлайн