You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中格式化HTML并将<tr>子元素保持在一行?

解决HTML美化打印并保持子元素同行的问题

默认的BeautifulSoup.prettify()会将所有标签都换行缩进,导致<tr>下的每个<td>都单独占一行,不符合需求。可以通过先整体美化再针对性调整,或者预处理<tr>标签后再美化的方式解决。

方法一:美化后字符串替换

这种方式简单直接,先利用prettify()完成整体格式化,再通过字符串替换去掉<tr>内部<td>的换行和多余缩进:

from bs4 import BeautifulSoup

html = '''<html><body><h1>hello world</h1><table><tr><td>1 STRING</td><td>2 STRING</td><td>3 STRING</td></tr></table></body></html>'''

soup = BeautifulSoup(html, 'html.parser')
# 生成基础美化后的HTML
prettified_html = soup.prettify()

# 替换<tr>内部的换行和缩进,将<td>内容合并到同一行
adjusted_html = prettified_html.replace('      <td>', '<td>').replace('</td>\n      ', '</td>')

print(adjusted_html)

方法二:预处理标签后再美化

先解析HTML,将每个<tr>的子元素内容拼接成一行,再执行美化:

from bs4 import BeautifulSoup

html = '''<html><body><h1>hello world</h1><table><tr><td>1 STRING</td><td>2 STRING</td><td>3 STRING</td></tr></table></body></html>'''

soup = BeautifulSoup(html, 'html.parser')

# 遍历所有<tr>标签
for tr in soup.find_all('tr'):
    # 保存<tr>的所有子元素的HTML字符串
    children_html = ''.join(str(child) for child in tr.children)
    # 清空<tr>原内容,重新添加拼接后的内容
    tr.clear()
    tr.append(BeautifulSoup(children_html, 'html.parser'))

# 此时再prettify,<tr>内部的<td>会保持在同一行
print(soup.prettify())

最终输出效果

两种方法都能得到符合预期的格式化结果:

<html>
 <body>
  <h1>
   hello world
  </h1>
  <table>
   <tr>
    <td>1 STRING</td><td>2 STRING</td><td>3 STRING</td>
   </tr>
  </table>
 </body>
</html>

内容的提问来源于stack exchange,提问作者Ayush J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:52:34