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

如何在Python中将HTML转换为文本?需忽略标签并美化table、br标签

在Python中把HTML转成带格式文本的简便方法

嘿,这个需求我刚好处理过好几次,给你分享两个靠谱又简便的实现思路,既能忽略HTML标签,又能保留table、br这类元素的格式化效果:

方法一:用html2text一键搞定(懒人首选)

这个库专门做HTML到Markdown格式文本的转换,对br、table这类标签的格式化处理得非常到位,不用自己写一堆逻辑,亲测好用。

首先安装依赖:

pip install html2text

然后直接写代码就行,参数可以按需调整:

import html2text

# 你的HTML内容示例
html_content = """
<p>这是一段带格式的测试内容:</p>
<br>
<table>
  <tr><th>姓名</th><th>年龄</th><th>职业</th></tr>
  <tr><td>张三</td><td>25</td><td>程序员</td></tr>
  <tr><td>李四</td><td>30</td><td>设计师</td></tr>
</table>
<p>这是结尾的文本<br>又换了一行</p>
"""

# 初始化转换器
converter = html2text.HTML2Text()
converter.ignore_links = True  # 如果不需要保留HTML里的链接,设为True
converter.body_width = 0  # 避免自动换行破坏格式
converter.ignore_images = True  # 忽略图片标签

# 转换并输出
result_text = converter.handle(html_content)
print(result_text)

转换后的文本会自动把<br>换成换行,<table>转换成清晰的Markdown表格结构,完全符合你的需求,几乎零成本上手。

方法二:用BeautifulSoup自定义处理(灵活可控)

如果你需要更精细的格式控制(比如表格用空格分隔而不是Markdown格式),那BeautifulSoup是更好的选择,它能让你逐个处理特定标签。

先安装依赖:

pip install beautifulsoup4

然后写自定义的转换函数,针对性处理br和table:

from bs4 import BeautifulSoup

def html_formatted_to_text(html_str):
    soup = BeautifulSoup(html_str, "html.parser")
    
    # 处理<br>标签:直接替换成换行符
    for br_tag in soup.find_all("br"):
        br_tag.replace_with("\n")
    
    # 处理<table>标签:转换成带分隔线的文本表格
    for table_tag in soup.find_all("table"):
        table_lines = []
        # 遍历每一行
        for row_idx, row_tag in enumerate(table_tag.find_all("tr")):
            # 获取所有表头或单元格
            cells = row_tag.find_all(["th", "td"])
            # 用竖线+空格分隔单元格,保证可读性
            cell_texts = [cell.get_text(strip=True) for cell in cells]
            row_line = " | ".join(cell_texts)
            table_lines.append(row_line)
            # 如果是表头行,下面加一条分隔线
            if row_idx == 0:
                separator = "-" * len(row_line)
                table_lines.append(separator)
        # 把原表格替换成处理后的文本块
        table_tag.replace_with("\n".join(table_lines) + "\n\n")
    
    # 最终提取文本,用换行分隔,去掉多余空格
    return soup.get_text("\n", strip=True)

# 测试示例
test_html = """
<div>
  <h3>员工信息表</h3>
  <br>
  <table>
    <tr><th>ID</th><th>姓名</th><th>部门</th></tr>
    <tr><td>001</td><td>王五</td><td>技术部</td></tr>
    <tr><td>002</td><td>赵六</td><td>市场部</td></tr>
  </table>
</div>
"""

print(html_formatted_to_text(test_html))

这个方法的好处是你可以完全自定义每个标签的处理逻辑,比如想把表格的分隔符改成制表符,或者调整换行的数量,都能轻松实现。


内容的提问来源于stack exchange,提问作者dlis168

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:37