前言
在技术文档编写和开发工作中,常常需要将HTML内容转换为Markdown格式,以便在文本编辑器或版本控制系统中更高效地管理和展示。面对不同的HTML结构和特定转换需求,选择适当的工具和方法是实现高效转换的关键。本文旨在探讨几种主要的HTML到Markdown转换方案,并分析其在不同应用场景中的最佳实践,以帮助开发者在实际操作中做出最优选择。
方案一:使用 html2text
核心工具包
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 > log.txt 2>&1 &<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
核心工具包
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 > log.txt 2>&1 &<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 和手动处理
核心工具包
BeautifulSoup:用于解析 HTML 并提取所需内容。- 手动编写转换规则:将 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 > log.txt 2>&1 &<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手动处理,适合特殊需求或复杂的转换逻辑,完全自定义的场景。