如何使用 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]
我在一个网站上有多个 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]