我有一个非常愚蠢和讨厌的问题,我尝试将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,因为降价无效且无法正确呈现
我解决这个问题的方法如下:
strong
<br/>
分为两组:文本前面的文本和文本后面的内容。<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>
元素之前,我无法实现(并且没有实现)找到如何进入doc)。
我想要更普遍地实现什么目标?:
我想改变它:
<strong> <br/>Über die XXXX GmbH: </strong>
进入
# Note the space
(whitespace)<br/><strong>Über die XXXX GmbH:</strong>(whitespace)
它不必使用Beautiful Soup,我只是不知道其他解决方案。
提前致谢!
答案 0 :(得分:1)
根据您的示例,您可以从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>