gpt4 book ai didi

python - BeautifulSoup : Extracting all the
from the

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:43 24 4
gpt4 key购买 nike

我有一个非常愚蠢和烦人的问题,我尝试将 html 转换为 markdown,但我的 html 格式很愚蠢:我一直有这样的东西:

<strong>Ihre Aufgaben:<br/></strong>

<strong> <br/>Über die XXXX GmbH:<br/></strong>

这是完全有效的 HTML。

但是我要转换为 Markdown 的库 ( HTML2Text ) 将其转换为:

**Ihre Aufgaben:\n**

** \nÜber die XXXX GmbH:\n**

这是一个already reported issue因为 ma​​rkdown 无效并且无法正确渲染

我解决这个问题的方法如下:

  • 使用 BeautifulSoup 查找所有 strong导致这个问题的原因
  • <br/> 进行分类分为 2 组:文本之前的组和文本之后的组。
  • 解开文本后面的内容,以便将它们推出<strong>

我的代码(格式还不是很好):

soup = BeautifulSoup(html)
emphased = soup.find_all('strong')
for single in emphased:
children = single.children
before = 0
foundText = None
after = 0
for child in children:
if not isinstance(child, NavigableString):
if foundText:
after += 1
child.unwrap()
else:
before += 1
# DOES NOT WORK
child.unwrap()
else:
foundText = single.get_text().strip()

我目前的问题是什么?

我想打开<br/> 内容之前,并将它们放在 <strong> 之前元素,但我无法实现这一点(并且没有找到如何在文档中继续进行)。

我想更普遍地实现什么目标?:

我想改变它:

<strong> <br/>Über die XXXX GmbH: </strong>

进入

# Note the space
(whitespace)<br/><strong>Über die XXXX GmbH:</strong>(whitespace)

它不必使用 Beautiful Soup,我只是不知道其他解决方案。

提前致谢!

最佳答案

根据您的示例,您可以提取所有 br来自 strong 的标签并将它们放在前面,用新标签替换最新标签。

这是一个片段:

from bs4 import BeautifulSoup

soup = BeautifulSoup("<strong>Ihre Aufgaben:<br/></strong>", "html.parser")
for strong in soup.find_all("strong"):
[s.extract() for s in strong.find_all('br')]
strong.string = strong.get_text(strip=True)
strong.replaceWith(BeautifulSoup( " %s%s " % ("<br/>", strong), "html.parser"))
print soup

哪些输出:

<br/><strong>Ihre Aufgaben:</strong>

关于python - BeautifulSoup : Extracting all the <br/> from the <strong>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414465/

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