XPath匹配包含文本的每个节点

时间:2011-04-09 06:46:43

标签: python xpath lxml scrape

如何以递归方式匹配包含文本的所有子节点。

如果我有像

这样的树
table
 tr
  td
   "hello"
  td
   b
    "hi"
 tr
  td
   "salud"
  td
   em
    "bonjour"

如何将表节点中的每个字符串与xpath匹配? 像“// table / * / text()”这样的东西?

2 个答案:

答案 0 :(得分:3)

您提供的XPath表达式几乎已经正确:

//table//text()

将获取文档中所有表中的所有文本节点。

答案 1 :(得分:0)

以下情况如何?

from lxml import etree
from StringIO import StringIO

input = '''
<table>
 <tr>
  <td>hello</td>
  <td><b>hi</b></td>
 </tr>
 <tr>
  <td>salud</td>
  <td><em>bonjour</em></td>
 </tr>
</table>
'''

parser = etree.HTMLParser()
tree = etree.parse(StringIO(input), parser)

for p in tree.xpath("//table/tr/td//text()"):
    print p

...给出了输出:

hello
hi
salud
bonjour