Python/Etree:从元素及其子元素获取文本
我需要使用一些这样的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>
问题是我需要获取所有子元素的文本(比如和标签里的文本)以及文本节点(比如子元素之间的逗号部分)。
我现在只能获取每个子元素的文本并把它们拼在一起(这样能得到所有内容,但缺少文本节点),或者只获取文本节点(这样就得不到和标签里的文本)。有没有办法同时获取这两种内容呢?
2 个回答
0
你可以使用 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"
1
lxml的更新日志显示,lxml版本2.3可以和Python 3.1.2及更新的版本一起使用。
另外,你可以用正则表达式 re.sub(r'<[^>]*?>', '', val)
来实现类似于PHP中的strip_tags功能。