2017-06-20 367 views
1

如何从xpath中提取['First one', 'Second two', 'Third']用xpath从html中提取列表,并带有换行符

s = """ 
<table cellpadding="0" cellspacing="0" border="0"> 
<tbody><tr> 
<th class="searchResults" style="width:75px">First<br>one</th> 
<th class="searchResults" style="width:150px">Second<br>two</th> 
<th class="searchResults" style="width:95px">Third<br></th> 
</tr> 
</tbody></table> 
""" 
import lxml.html as LH 
e = LH.fromstring(s) 
e.xpath('/th[@class="searchResults"]/text()') 

也分裂在<br>太,我不想。我试过string()normalize-space(),但不能完全正确。

+1

事先做's = s.replace('
','')是否存在问题? – PaulMcG

+1

它是否必须是仅限xpath的解决方案?在e.xpath('// th [@ class =“searchResults”]')]'中的节点的[''.join(node.itertext())会做到这一点。 –

+0

试试'e.xpath('normalize-space()')。split()' – Andersson

回答

2

正如其他人指出的,由于lxml仅支持XPath 1.0,因此在您的实际情况中没有纯粹的XPath解决方案。但使用XPath 2.0及以上,你可以使用string-join()功能,您可以在路径步骤调用函数(见演示here):

//th[@class='searchResults']/string-join(text(), ' ') 

的XPath的工作原理大致相同的方式通过​​注释中的片段:

[' '.join(node.itertext()) for node in e.xpath('//th[@class="searchResults"]')] 
相关问题