文档解析-html转markdown-python实现方案

499 阅读4分钟

前言

在技术文档编写和开发工作中,常常需要将HTML内容转换为Markdown格式,以便在文本编辑器或版本控制系统中更高效地管理和展示。面对不同的HTML结构和特定转换需求,选择适当的工具和方法是实现高效转换的关键。本文旨在探讨几种主要的HTML到Markdown转换方案,并分析其在不同应用场景中的最佳实践,以帮助开发者在实际操作中做出最优选择。

方案一:使用 html2text

核心工具包

  1. html2text:用于将 HTML 内容转换为 Markdown 格式。

示例代码

import html2text

html_content = """
<h3>启动服务</h3><p>执行如下命令,启动关闭证书验证(no ssl)的离线语音服务</p><pre><code><br/>nohup bash run_server.sh \<br/>--download-model-dir /workspace/models \<br/>--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \<br/>--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx  \<br/>--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \<br/>--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \<br/>--itn-dir thuduj12/fst_itn_zh \<br/>--certfile 0 \<br/>--hotword /workspace/models/hotwords.txt &gt; log.txt 2&gt;&amp;1 &amp;<br/><pre><code><br/></code></pre></code></pre>
"""

md_content = html2text.html2text(html_content)
print(md_content)

转换后的 Markdown 内容

### 启动服务

执行如下命令,启动关闭证书验证(no ssl)的离线语音服务

    nohup bash run_server.sh \
    --download-model-dir /workspace/models \
    --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \
    --model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx \
    --punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \
    --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \
    --itn-dir thuduj12/fst_itn_zh \
    --certfile 0 \
    --hotword /workspace/models/hotwords.txt > log.txt 2>&1 &

方案二:使用 markdownify

核心工具包

  1. markdownify:用于将 HTML 转换为 Markdown,支持更灵活的自定义规则。

示例代码

from markdownify import markdownify as md

html_content = """
<h3>启动服务</h3><p>执行如下命令,启动关闭证书验证(no ssl)的离线语音服务</p><pre><code><br/>nohup bash run_server.sh \<br/>--download-model-dir /workspace/models \<br/>--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \<br/>--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx  \<br/>--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \<br/>--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \<br/>--itn-dir thuduj12/fst_itn_zh \<br/>--certfile 0 \<br/>--hotword /workspace/models/hotwords.txt &gt; log.txt 2&gt;&amp;1 &amp;<br/><pre><code><br/></code></pre></code></pre>
"""

md_content = md(html_content)
print(md_content)

转换后的 Markdown 内容

### 启动服务

执行如下命令,启动关闭证书验证(no ssl)的离线语音服务

nohup bash run_server.sh \
--download-model-dir /workspace/models \
--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \
--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx  \
--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \
--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \
--itn-dir thuduj12/fst_itn_zh \
--certfile 0 \
--hotword /workspace/models/hotwords.txt > log.txt 2>&1 &

方案三:使用 BeautifulSoup 和手动处理

核心工具包

  1. BeautifulSoup:用于解析 HTML 并提取所需内容。
  2. 手动编写转换规则:将 HTML 内容手动转换为 Markdown。

示例代码

from bs4 import BeautifulSoup

html_content = """
<h3>启动服务</h3><p>执行如下命令,启动关闭证书验证(no ssl)的离线语音服务</p><pre><code><br/>nohup bash run_server.sh \<br/>--download-model-dir /workspace/models \<br/>--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \<br/>--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx  \<br/>--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \<br/>--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \<br/>--itn-dir thuduj12/fst_itn_zh \<br/>--certfile 0 \<br/>--hotword /workspace/models/hotwords.txt &gt; log.txt 2&gt;&amp;1 &amp;<br/><pre><code><br/></code></pre></code></pre>
"""

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

md_content = ""

# 处理标题
h3 = soup.find('h3')
if h3:
    md_content += "### " + h3.text + "\n\n"

# 处理段落
p = soup.find('p')
if p:
    md_content += p.text + "\n\n"

# 处理代码块
code = soup.find('code')
if code:
    # 使用 replace 替换 <br/> 为换行符
    md_content += "```\n" + code.get_text(separator="\n").replace('<br/>', '\n') + "\n```\n"

print(md_content)

转换后的 Markdown 内容

### 启动服务

执行如下命令,启动关闭证书验证(no ssl)的离线语音服务

nohup bash run_server.sh \
--download-model-dir /workspace/models \
--vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx \
--model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx  \
--punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx \
--lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst \
--itn-dir thuduj12/fst_itn_zh \
--certfile 0 \
--hotword /workspace/models/hotwords.txt > log.txt 2>&1 &

总结

  • 方案一 使用 html2text,适合快速转换,代码简单,适用于大部分普通的 HTML 转换需求。
  • 方案二 使用 markdownify,提供更多控制和自定义选项,适合复杂结构的 HTML。
  • 方案三 使用 BeautifulSoup 手动处理,适合特殊需求或复杂的转换逻辑,完全自定义的场景。