我使用BeautifulSoup 4(目前为4.3.2)修改了一些HTML。将修改后的汤转换为字符串时,所有br
元素都将写为<br/>
:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<p>Paragraph containing<br>line break</p>')
>>> soup.p
<p>Paragraph containing<br/>line break</p>
>>> str(soup.p)
'<p>Paragraph containing<br/>line break</p>'
HTML 5可以,但不一定适用于HTML 4,也适用于我的用例;我想像过去那样生成输出。
formatter
和prettify
方法的encode
参数似乎只影响字符串内容。
是否可以告诉BeautifulSoup 不生成自动关闭标签? 或者我是否需要自己编写一个函数来处理汤并创建这样的字符串?
答案 0 :(得分:2)
据我了解,BeautifulSoup
包含已打开然后关闭的标记或自动关闭标记。没有非关闭标记这样的东西,因为你想要<br>
。
很久以前,someone tried to apply a patch为HTML 4正确输出prettify()
br
个标记。
最简单的解决方案是手动删除关闭部分:
>>> data = '<p>Paragraph containing<br>line break</p>'
>>> soup = BeautifulSoup(data, 'html.parser')
>>> str(soup).replace('</br>', '')
'<p>Paragraph containing<br>line break</p>'
这真的不是一个美丽可靠的解决方案。
更好的方法是创建自己的树构建器类,并控制br
和handle_starttag()
方法构建handle_endtag()
标记的方式