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

How to parse all content of a div into 1 element in a list instead of multiple using xpath and lxml

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

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

当我使用以下代码获取这些 div 中的文本时,我最终在列表中得到了 3 个单独的元素,而我实际上只希望每个 [=26 在列表中有 1 个元素=].

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

我得到:

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

但我真的很想:

['test1\ntest2\test3']     

我可以接受有或没有换行符,因为我可以去掉它们。我想必须有一种方法可以用 xpath 来做到这一点。否则我想我将不得不使用 iterparse()?

我建议您将结果加入 Python

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

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

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

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

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

从技术上讲,在 br 个标签之间意味着:

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