如何使用xpath和lxml将div的所有内容解析为列表中的1个元素而不是多个元素

时间:2017-10-13 13:08:04

标签: python html parsing xpath lxml

我在网站上有多个带有一类文本的div,如下所示:

<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()?

2 个答案:

答案 0 :(得分:0)

我建议你加入Python中的结果

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

或者,您可以在xpath表达式中应用函数,例如normalize-space,会给你一个字符串,但是你仍然可以在字符串中获取换行符......

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

答案 1 :(得分:0)

它可以帮助您获取div中的文本,而不是<br/>可以通过以下方式检索:

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

从技术上讲,br代码之间的意思是:

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