讓說,我有這樣的代碼:如何使用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日」。
讓說,我有這樣的代碼:如何使用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日」。
純XPath 1.0解決方案。
用途:
string(normalize-space(//table/tr[@id = 'something']))
@acheruns:如果你有這個節點30次,那麼只有XPath 1.0不可能獲得所有需要的字符串。您必須在循環中評估XPath表達式30次(從1到count(表達式)),每次使用不同的索引。 'string(normalize-space((// table/tr [@id ='something'])[$ k]))'---其中'$ k'必須被1到count的數字// table/tr [@id ='something'])' – 2012-02-27 23:36:30
你可以收集來自各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())
收率s
8 september
2008
http://stackoverflow.com/a/1405439/181772的 – 2012-02-27 22:07:55
可能重複[XPath的返回排位子節點值的字符串連接(HTTP://計算器.com/questions/1403971/xpath-to-return-string-concatenation-qualifying-child-node-values) – 2012-02-27 22:08:42