如何使用Xpath(lxml)从多个标签中提取文本?

时间:2012-02-27 22:02:50

标签: python xpath lxml

假设我有这样的代码:

<table>
  <tr>
    <td colspan=2>Date</td>
  </tr>
  <tr id='something'>
   <td>8 september</td>
   <td>2008</td>
  </tr>
</table>

我想提取“2008年9月8日”的日期。

2 个答案:

答案 0 :(得分:2)

纯XPath 1.0解决方案。

使用:

string(normalize-space(//table/tr[@id = 'something']))

答案 1 :(得分:0)

您可以从每个td元素中收集文本,然后将其加入' '.join(...)

import lxml.html as LH

content = '''
<table>
  <tr>
    <td colspan=2>Date</td>
  </tr>
  <tr id='something'>
   <td>8 september</td>
   <td>2008</td>
  </tr>
</table>
'''

doc = LH.fromstring(content)
date = ' '.join(td.text for td in doc.xpath('//table/tr[@id = "something"]/td'))
print(date)

产量

8 september 2008

或者,如果您可以处理回车,则可以使用text_content()方法:

for td in doc.xpath('//table/tr[@id = "something"]'):
    print(td.text_content())

产量

8 september
   2008