首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让BeautifulSoup输出<br>而不是<br/>

让BeautifulSoup输出<br>而不是<br/>
EN

Stack Overflow用户
提问于 2014-12-02 09:08:32
回答 1查看 898关注 0票数 1

我使用BeautifulSoup 4修改了一些HTML (目前为4.3.2)。当将修改后的汤转换为字符串时,所有br元素都编写为<br/>

代码语言:javascript
复制
>>> 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参数对prettifyencode方法似乎只影响字符串内容。

有可能告诉BeautifulSoup不要产生自关闭标签吗?或者,我是否需要自己编写一个函数来遍历汤并创建这样的字符串?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-03 14:35:32

据我所知,BeautifulSoup有打开后关闭的标记或自关闭标记。没有像你想要的<br>那样的非封闭标签。

很久以前,有人试图应用补丁为了使prettify()输出br标签适合于HTML4。

最简单的解决办法是手动删除关闭部分:

代码语言:javascript
复制
>>> 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()方法中的构造方式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27245574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档