我使用BeautifulSoup 4修改了一些HTML (目前为4.3.2)。当将修改后的汤转换为字符串时,所有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不要产生自关闭标签吗?或者,我是否需要自己编写一个函数来遍历汤并创建这样的字符串?
发布于 2014-12-03 14:35:32
据我所知,BeautifulSoup有打开后关闭的标记或自关闭标记。没有像你想要的<br>那样的非封闭标签。
很久以前,有人试图应用补丁为了使prettify()输出br标签适合于HTML4。
最简单的解决办法是手动删除关闭部分:
>>> 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()方法中的构造方式。
https://stackoverflow.com/questions/27245574
复制相似问题