结论先行
把 HTML 代码粘贴到 HTML 转 Markdown 在线工具,点击「运行」按钮,立刻就能得到干净的 Markdown。无需安装任何软件,所有转换都在浏览器内完成,数据不会发送到外部服务器。
输出的 Markdown 以 CommonMark在新标签页中打开 为基础语法,表格、任务列表、删除线、自动链接等扩展功能遵循 GitHub Flavored Markdown 规范在新标签页中打开。
什么场景需要把网页内容转为 Markdown
在实际工作中,需要把 HTML 网页转为 Markdown 的情况非常常见。
WordPress 或 CMS 站点迁移
WordPress 等 CMS 导出的文章数据几乎都是 HTML 格式。如果你要把内容迁移到 Hugo、Astro、Jekyll 等静态站点生成器,或者 GitHub Pages、CSDN 等 Markdown 平台,就需要把每篇文章转成 Markdown。文章数量少时手动复制也能应付,但要保留格式和结构、批量转换,使用转换工具更稳妥。不同导出格式的注意点和需要替换的标签,可以参考 WordPress 导出 Markdown 指南。
Notion 或飞书导出数据整理
Notion 支持 HTML 格式导出,飞书文档也可以导出为 HTML。但这些工具生成的 HTML 中混入了大量自定义的 class 属性和多层嵌套的 div 标签,直接拿到其他编辑器或工具里很麻烦。转成 Markdown 后,多余的布局标签被去除,只保留纯文本结构,可读性高很多。
网页内容剪藏与笔记
想把网页内容引用到笔记软件(Obsidian、Logseq、Joplin)或技术文档中时,直接复制 HTML 会带入一堆标签和内联样式。转成 Markdown 后,标题、列表、链接、代码块等结构被干净地保留。另外,把内容喂给 LLM 作为 prompt 上下文时,Markdown 比 HTML 消耗的 token 少得多,效率更高。
HTML 邮件正文复用
工作中收到的 HTML 邮件正文,如果要搬到内部 Wiki 或技术文档里,手动删标签很费时间。用转换工具可以保留标题、列表、链接的结构,直接提取出干净的 Markdown 文本。
用 FormatArc 在线转换
HTML 转 Markdown 工具 的操作很简单:粘贴 HTML,点按钮,出结果。
步骤 1:打开工具
访问 HTML 转 Markdown 页面。
步骤 2:粘贴 HTML
在左侧输入框中粘贴要转换的 HTML 代码。支持 <table>、<ul>、<ol>、<a>、<img>、<pre>、<code> 等主流 HTML 标签。
步骤 3:点击运行
点击「运行」按钮,右侧立即输出 Markdown 结果。


所有处理都在浏览器本地完成。即使粘贴的是公司内部文档或未公开的草稿,数据也不会上传到外部服务器。
HTML 元素与 Markdown 对照表
大部分常见 HTML 元素都能转成 Markdown,但 Markdown 比 HTML 表达范围小,没有对应写法的属性和样式在转换过程中会被丢弃。
下表整理了 WHATWG HTML Living Standard在新标签页中打开 中的主要元素在 CommonMark在新标签页中打开 和 GFM 规范在新标签页中打开 下如何映射,以及哪些信息会被删除。
| HTML 元素 | GFM Markdown 对应写法 | 转换时的注意事项与丢失信息 |
|---|---|---|
标题 <h1>–<h6> | # 到 ######(ATX) | 按标题级别对应 # 的数量。<h1> 对应 #,<h6> 对应 ######。CommonMark 和 HTML 一样只定义了 6 个级别。 |
无序列表 <ul> | -、*、+ 标记 | 嵌套结构通过缩进保留。使用哪个符号取决于转换工具的默认设置。 |
有序列表 <ol> | 1.、2.、… 标记 | start 属性(自定义起始编号)和 type 属性(a、i 等)在 Markdown 中没有对应写法,会被删除。 |
表格 <table> | GFM 管道表格(| col |) | 表头行和列对齐(align)可以保留。单元格合并(colspan/rowspan)、单元格内的块级元素、<caption> 标签在管道表格中没有支持。 |
链接 <a href> | [文本](url) | href 地址和链接文本保留。target、rel 等属性被删除,title 属性可以保留为可选形式 [文本](url "title")。 |
图片 <img src alt> |  | src 路径和 alt 替代文本保留。width、height、srcset、loading 等属性在 Markdown 中没有对应写法,被删除。 |
代码 <pre> / <code> | 围栏代码块 / 行内代码 | <pre><code> 转为围栏代码块,单独的 <code> 转为行内代码。class="language-..." 提示可以输出为代码块的语言标识。 |
引用 <blockquote> | > 前缀 | 每行前面加 > 。嵌套引用会叠加 >>。cite 属性没有对应写法,被删除。 |
加粗 <strong> / <b> | **文本** | 语义强调(<strong>)和视觉加粗(<b>)合并为同一种 ** 写法,语义区别不保留。 |
斜体 <em> / <i> | *文本* | 强调(<em>)和斜体(<i>)合并为同一种 * 写法,语义区别不保留。 |
上表没有列出的元素(style、class、布局用的 <div>/<span> 包裹标签、内联事件处理程序等)会被自动移除,只留下干净的结构性 Markdown。不过 GFM 允许内联 HTML,部分转换工具会选择不删除而是把不支持的标签原样保留在 Markdown 中。
CLI 和编程库的选择
除了浏览器工具,在命令行或代码中把 HTML 网页转为 Markdown 也是常见需求。根据你使用的技术栈选择即可。
Pandoc(通用文档转换 CLI)
pandoc -f html -t markdown -o output.md input.html
Pandoc 不仅能处理 HTML,还支持 Word (docx)、EPUB、LaTeX 等多种文档格式互转。使用 -t gfm 选项可以输出 GFM 表格语法。适合批量文件转换或处理复杂文档结构,需要本地安装。
Turndown(JavaScript / Node.js)
import TurndownService from "turndown";
const turndown = new TurndownService();
const markdown = turndown.convert("<h1>Hello</h1><p>World</p>");
console.log(markdown);
Node.js 生态中最常用的标准库。加上 turndown-plugin-gfm 插件后支持 GFM 表格、删除线、任务列表。也能在浏览器环境运行,适合在自有 Web 应用中嵌入转换功能。
Python 库
markdownify
pip install markdownify
from markdownify import markdownify
html = "<h1>Title</h1><p>Hello <strong>world</strong></p>"
print(markdownify(html, heading_style="ATX"))
markdownify 基于 BeautifulSoup,对爬虫抓取到的不完整 HTML 也能稳定处理。通过 heading_style="ATX"、bullets="-*+"、strip=["script", "style"] 等选项可以精细控制输出格式。
html2text
pip install html2text
import html2text
h = html2text.HTML2Text()
print(h.handle("<h1>Title</h1><p>Hello world</p>"))
历史悠久、维护活跃的库,既可以在代码中使用,也可以作为命令行工具运行(html2text input.html)。一次性快速转换保存的网页很方便。
html-to-markdown(Go - JohannesKaufmann)
go install github.com/JohannesKaufmann/html-to-markdown/cli/html2markdown@latest
html2markdown < input.html > output.md
Go 社区的事实标准库。同时提供库和独立 CLI 二进制文件,支持表格和自定义转换规则扩展。在 CI runner 或 Docker 容器中作为单个静态二进制文件运行很轻量。
按用途选择工具
| 工具 | 是否需要安装 | 基础语言 | 推荐场景 |
|---|---|---|---|
| FormatArc | 不需要(浏览器) | — | 即时单次转换、涉及敏感数据的内部文件 |
| Pandoc | 需要(Homebrew / apt) | CLI | 大批量转换、多种文档格式处理 |
| Turndown | npm 安装 | JavaScript | Node.js 服务、Web 前端嵌入 |
| markdownify | pip 安装 | Python | 网页爬取和数据采集流水线 |
| html2text | pip 安装 | Python | 保存的网页文本提取和命令行操作 |
| JohannesKaufmann | go install | Go | CI/CD 流水线、Docker 轻量静态二进制 |
HTML 表格转 Markdown 的注意事项
HTML 转 Markdown 时最容易出错或格式崩坏的地方就是 <table> 标签。
Markdown 的管道表格语法由 GFM 规范在新标签页中打开 定义,表头行、数据行、列对齐(align)都能正常表达。但 HTML 表格支持的复杂布局功能并非全部能对应。
能干净转换的标准表格结构
有 <thead> 和 <tbody> 结构、单元格是简单的 <td> 和 <th>、表头使用了 align="left|center|right" 对齐属性的常规表格,可以无损转为管道表格。
<table>
<thead><tr><th>商品名</th><th align="right">价格</th></tr></thead>
<tbody>
<tr><td>苹果</td><td align="right">1200</td></tr>
<tr><td>香蕉</td><td align="right">800</td></tr>
</tbody>
</table>
上面的 HTML 会转成干净的 Markdown 管道表格:
| 商品名 | 价格 |
|--------|------:|
| 苹果 | 1,200 |
| 香蕉 | 800 |
无法直接转换的 3 种结构
在 Markdown 表格规范中没有直接对应写法、转换时会发生信息丢失的典型结构有 3 种:
colspan/rowspan(单元格合并)— Markdown 管道表格要求所有行列构成矩形网格。合并单元格信息不被支持,转换工具会拆分单元格或把合并内容挤到一个单元格里。- 单元格内的块级元素 —
<td>里放列表(<ul>/<ol>)、代码块(<pre>)或嵌套表格(<table>)时,管道表格结构会崩坏。行内元素(<strong>、<em>、<a>、<code>)可以正常转换。 - 单元格内换行(
<br>)— 单元格内出现换行时,不同解析器行为不同:有的忽略换行,有的以 GFM 允许的内联 HTML 形式原样输出<br>标签。
实用应对方法
遇到管道表格无法表达的复杂表格时,有两种实用的处理方式:
- 整篇内容转 Markdown,但把那个复杂表格保留为原始 HTML(
<table>...</table>)形式。GFM 和大部分静态站点生成器(GitHub、Hugo、CSDN 等)都能正常渲染 Markdown 中的内联 HTML 标签。 - 如果内容不是复杂布局而是纯数据集,先把数据整理成行列结构,再通过 CSV 转 Markdown 工具 生成 Markdown 表格,这样更稳定。
管道表格的对齐、单元格内换行、转义等语法细节,可以参考 Markdown 表格语法 和 GFM 表格速查表。如果想进一步了解 HTML 表格转 Markdown 时列错位、colspan/rowspan 的处理方式,可以参考 HTML 表格转 Markdown 表格的指南。
常见问题与解决
style 和 class 属性被删除
HTML 标签上的 style 内联 CSS 和 class 属性在 Markdown 中没有对应概念,转换时会被自动删除。如果项目需要保留原始样式信息,转换前请把源 HTML 文件备份。
如果粘贴源来自 Word、Google Docs 或网页,很容易混入多余标签(<o:p>、mso-* 样式、无意义的 span 标签等)。这种情况可以先转成干净的 Markdown 结构,之后如果需要重新加样式,再通过 Markdown 转 HTML 工具套用 CSS 类名重新渲染。关于去除这类多余标签和内联样式的完整步骤,可以参考 HTML 粘贴 Markdown 化并去除 span、内联样式的方法。
图片相对路径问题
<img src="..."> 标签会转成  的 Markdown 语法。但源 HTML 中用相对路径(如 ./images/photo.png)写的图片,在 Markdown 文件被移到其他平台或项目后路径可能对不上,图片就显示不出来了。
建议先用 HTML 转 Markdown 工具转换,确认图片替代文本(alt)和链接结构没问题后,再单独处理图片文件复制和路径修改。
空白字符、 、转义反斜杠(\)
转换后的 Markdown 结果中可能出现意料之外的字符。 实体会根据转换器不同变成普通空格或不换行空格,连续空格会被压缩为一个空格。
另外,正文中 *、_、#、[ 等字符前面可能会自动加上反斜杠(\)。这是转换引擎为了防止这些符号被误读为 Markdown 格式语法(强调、标题、链接等)而做的安全转义。如果觉得多余,确认该字符不是列表或强调的起始点后手动去掉即可。
常见问题(FAQ)
支持 GFM 表格吗?
支持。HTML 的 <table> 元素会转成 GFM 管道表格(| 列1 | 列2 |)格式,<thead> 表头行和基本的列对齐(align)属性也会被保留。
转换是在浏览器内完成的吗?
是的。HTML 解析和 Markdown 文本生成都通过 JavaScript 在用户的浏览器内执行。即使输入公司内部文档或未公开稿件,数据也不会发送到外部服务器。
和 Pandoc、Turndown 有什么区别?
Pandoc 需要本地 CLI 环境安装,Turndown 需要 Node.js 项目配置。FormatArc 网页版转换工具无需安装,在浏览器中粘贴即可转换并复制结果,单次操作最快。大批量自动化或构建脚本场景下,Pandoc 或 Turndown 库更合适。
图片和相对路径会保留吗?
<img src="..."> 会转成 ,图片地址和替代文本都会保留。源 HTML 中的相对路径会原样保留,迁移到其他平台时需要单独复制图片文件并按需修改路径。
为什么 class 和 style 属性会被删除?
Markdown 是面向文本结构表达的轻量标记语言,不是用来做样式的。内联 CSS 和 class 属性没有对应的 Markdown 语法,所以为了保证跨环境兼容性和可移植性,转换时会移除这些样式属性。如果之后需要把 Markdown 重新转回 HTML,可以参考 Markdown 转 HTML 指南。
PDF 也能转换吗?
这个转换工具接收 HTML 作为输入,无法直接处理 PDF。要把 PDF 转成 Markdown,请使用专门的 PDF 转 Markdown 工具。不过如果 PDF 中没有保留表格结构,列可能会错位。表格错乱的原因和修复方法可以参考 PDF 转 Markdown 表格错乱的原因与修复方法。
总结
把 HTML 网页转为 Markdown 在 CMS 迁移、网页剪藏、Notion 数据整理等场景中都是刚需。
简单的单次转换或需要安全的本地处理时,直接用浏览器里的 HTML 转 Markdown 在线工具最方便。把 HTML 转 Markdown 工具加入你的日常工具链,配合 Pandoc 或 Turndown 处理批量和自动化场景,就能覆盖绝大多数网页内容转 Markdown 的需求。