Как извлечь текст из нескольких тегов с помощью Xpath (lxml)? - PullRequest
1 голос
/ 28 февраля 2012

Допустим, у меня есть такой код:

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

Я хочу извлечь дату, чтобы иметь "8 сентября 2008".

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Чистый раствор XPath 1.0.

Использование:

string(normalize-space(//table/tr[@id = 'something']))
0 голосов
/ 28 февраля 2012

Вы можете собрать текст из каждого элемента 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
...