2017-10-13 98 views
1

我有一类网站的文字内容的多个div看起来像这样一个div的所有内容解析为1元的列表,而不是多个:如何使用XPath和LXML

<div class="text"> 
"test1" 
<br> 
"test2" 
<br> 
"test3" 
<br> 
</div> 

当我使用下面的代码来获取这些div中的文本,最后我列出了3个单独的元素,当我真的只想在每个div的列表中添加1个元素时。

mytext = tree.xpath('//*[@class="text"]/text()') 
print(mytext) 

我得到:

['test1', 'test2', 'test3'] 

但我真的想:

['test1\ntest2\test3']  

我可以勉强接受带或不带换行符,因为我可以带他们出去。我想有一种方法可以用xpath来做到这一点。否则,我想我将不得不使用iterparse()?

+0

请你能只张贴整个代码一次 –

回答

0

我建议你刚刚加入的结果在Python

mytext = tree.xpath('//*[@class="text"]/text()') 
print('\n'.join(mytext)) 

或者你可以申请功能,在你的XPath表达式,如正常化空间,会给你一个字符串但你仍然有获得换行符到字符串...

tree.xpath('normalize-space(//*[@class="text"])') 
-> '"test1""test2""test3"' 
0

它可以帮助你得到的文本在div比下列<br/>的可检索:

//*[@class="text"]/text()[preceding-sibling::br] 

技术上,标签br之间将意味着:

//*[@class="text"]/text()[preceding-sibling::br and following-sibling::br]