有BeautifulSoup输出<br/>而不是<br/>

时间:2014-12-02 09:08:32

标签: python html beautifulsoup

我使用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,也适用于我的用例;我想像过去那样生成输出。

formatterprettify方法的encode参数似乎只影响字符串内容。

是否可以告诉BeautifulSoup 生成自动关闭标签? 或者我是否需要自己编写一个函数来处理汤并创建这样的字符串?

1 个答案:

答案 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>'

这真的不是一个美丽可靠的解决方案。

更好的方法是创建自己的树构建器类,并控制brhandle_starttag()方法构建handle_endtag()标记的方式

相关问题