gpt4 book ai didi

python - 带有 get_text 的 beautifulsoup - 处理空格

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:30 27 4
gpt4 key购买 nike

我使用 BS4 (python3) 从 html 文件中提取文本。我的文件如下所示:

<BODY>
<P>Hello World!</P>
</BODY>
</HTML>

当我调用 get_text() 方法时,输出是 Hello World!。因为它是 HTML,所以我期望得到 Hello World!(两个或多个空格在 HTML 中被替换为一个空格)。

这也与这种情况有关:

<BODY>
<P>Hello
World!</P>
</BODY>
</HTML>

我应该找到“Hello World!”但它是“Hello\n World!”。

我怎样才能实现我的目标?

最佳答案

问题是,无论是 get_text(strip=True) 还是加入 .stripped_strings 都不会在这里工作,因为只有一个 NavigableString第二种情况下的 p 元素,它的值为 Hello\n World!。换句话说,换行符位于文本节点内。

在这种情况下,您将不得不手动替换换行符:

soup.p.get_text().replace("\n", "")

或者,要同时处理 br 元素(用换行符替换它们),您可以创建一个转换函数来为您准备文本:

from bs4 import BeautifulSoup, NavigableString

data = """
<BODY>

<P>Hello
World!</P>

<P>Hello
<BR/>
World!</P>

</BODY>
</HTML>
"""

def replace_with_newlines(element):
text = ''
for elem in element.children:
if isinstance(elem, NavigableString):
text += elem.replace("\n", "").strip()
elif elem.name == 'br':
text += '\n'
return text

soup = BeautifulSoup(data, "html.parser")

for p in soup.find_all("p"):
print(replace_with_newlines(p))

打印(第一种情况下没有换行符,第二种情况下只有一个换行符):

Hello World!
Hello
World!

关于python - 带有 get_text 的 beautifulsoup - 处理空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38508850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com