Python / Etree: получить текст от элемента и его дочерних элементов - PullRequest
0 голосов
/ 21 мая 2011

Я должен использовать HTML-код, подобный этому:

<li><a href="#">S:</a><a class="#"> (n) </a><a href="#">trial</a>, <a href="#">trial run</a>, <b>test</b>, <a href="#">tryout</a> (trying something to find out about it) <i>"a sample for ten days free trial"; "a trial of progesterone failed to relieve the pain"</i></li>

Проблема в том, что мне нужно получить текст как от дочерних элементов (например, a s и i s), так и от текстовых узлов (например, , частей между дочерними элементами).

Все, что я могу сделать, это получить текст от каждого потомка и собрать его вместе (что дает мне все, кроме всех текстовых узлов) ИЛИ получить только текстовые узлы (а не a и i s). Есть ли способ получить оба?

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Журнал изменений lxml показывает, что lxml v2.3 совместим с python 3.1.2 и новее.

Также вы можете использовать регулярное выражение re.sub(r'<[^>]*?>', '', val) в качестве Python-эквивалента PHP strip_tags .

0 голосов
/ 21 мая 2011

Вы можете сделать это, используя lxml.html.

In [1]: import lxml.html

In [2]: el = lxml.html.fromstring('<li><a href="#">S:</a><a class="#"> (n) </a><a href="#">trial</a>, <a href="#">trial run</a>, <b>test</b>, <a href="#">tryout</a> (trying something to find out about it) <i>"a sample for ten days free trial"; "a trial of progesterone failed to relieve the pain"</i></li>')

In [3]: print el.text_content()
S: (n) trial, trial run, test, tryout (trying something to find out about it) "a sample for ten days free trial"; "a trial of progesterone failed to relieve the pain"
...