HTML转Markdown:6种高效转换方法与工具

Markdown因其简洁和跨平台特性,成为技术文档、博客和知识库的首选格式。
然而,许多内容(如网页、CMS导出)以HTML格式存在,转换需求日益增加。
HTML转Markdown 能将复杂的HTML结构转化为简洁的Markdown,方便编辑和发布。无论是迁移博客文章、转换网页内容,还是自动化文档处理,掌握HTML到Markdown的转换方法都能提升效率。
为什么需要HTML转Markdown?
HTML适合网页展示,但其标签繁琐,不利于快速编辑。Markdown语法轻量,支持标题、列表、代码块等,广泛用于GitHub、Notion和Jekyll。
转换HTML到Markdown的好处包括:
- 简化编辑:将HTML标签转为Markdown符号,易于修改。
- 跨平台兼容:Markdown适配多种文档工具和静态站点生成器。
- 自动化工作流:批量转换网页内容,集成到CI/CD管道。
根据2025年5月趋势(Pandoc 3.2+、Turndown 7.x),以下6种方法覆盖主流工具和场景。
方法1:使用Pandoc命令行工具
为什么使用? Pandoc是功能强大的文档转换工具,支持HTML到Markdown,处理复杂结构(如表格、嵌套列表)效果出色。
实现方法:
- 安装Pandoc:
bashsudo apt install pandoc # Debian/Ubuntusudo dnf install pandoc # RedHat/Fedora
- 准备HTML文件(
input.html
):html<h1>Hello</h1><p>This is a <strong>test</strong>.</p> - 转换命令:
bashpandoc -f html -t markdown -o output.md input.html
- 验证:检查
output.md
:markdown# HelloThis is a **test**.
注意:Pandoc支持多种Markdown变体,可用--to markdown_strict
指定严格格式。
方法2:使用Turndown JavaScript库
为什么使用? Turndown是轻量级的JavaScript库,适合前端或Node.js项目,易于集成到Web应用。
实现方法:
- 安装Turndown:
bashnpm install turndown
- 编写转换代码:
javascriptconst Turndown = require('turndown');const turndownService = new Turndown();const html = '<h1>Title</h1><p>Paragraph with <em>emphasis</em>.</p>';const markdown = turndownService.turndown(html);console.log(markdown);
- 验证:输出:
markdown# TitleParagraph with *emphasis*.
注意:Turndown支持自定义规则,可处理复杂HTML标签。
方法3:使用html2markdown Python库
为什么使用? html2markdown是Python生态的轻量工具,适合脚本自动化,易于批量处理。
实现方法:
- 安装html2markdown:
bashpip install html2markdown
- 编写转换代码:
pythonimport html2markdownhtml = '<h2>Subtitle</h2><ul><li>Item 1</li><li>Item 2</li></ul>'markdown = html2markdown.convert(html)print(markdown)
- 验证:输出:
markdown## Subtitle- Item 1- Item 2
注意:对复杂HTML(如内联样式)支持有限,建议预处理HTML。
方法4:使用在线转换工具
为什么使用? 在线工具(如htmltomarkdown.com)无需安装,适合快速转换少量HTML内容。
实现方法:
- 访问htmltomarkdown.com。
- 粘贴HTML代码:
html<h3>Quick Test</h3><p>Simple <a href="#link">link</a>.</p>
- 点击“Convert”按钮,获取Markdown。
- 验证:输出:
markdown### Quick TestSimple [link](#link).
注意:在线工具适合临时使用,批量转换推荐命令行工具。
方法5:使用Marked结合Turndown
为什么使用? Marked解析HTML到DOM,结合Turndown转换到Markdown,适合动态网页内容处理。
实现方法:
- 安装Marked和Turndown:
bashnpm install marked turndown
- 编写转换代码:
javascriptconst { marked } = require('marked');const Turndown = require('turndown');const turndownService = new Turndown();const html = '<div><h1>Dynamic</h1><p>Content</p></div>';const markdown = turndownService.turndown(html);console.log(markdown);
- 验证:输出:
markdown# DynamicContent
注意:Marked可预处理HTML,适合抓取网页内容。
方法6:自定义正则表达式转换
为什么使用? 正则表达式适合简单HTML转换,灵活但需手动定义规则,适合特定场景。
实现方法:
- 编写正则转换函数:
javascriptfunction htmlToMarkdown(html) {return html.replace(/<h1>(.*?)<\/h1>/g, '# $1\n\n').replace(/<p>(.*?)<\/p>/g, '$1\n\n').replace(/<strong>(.*?)<\/strong>/g, '**$1**').replace(/<em>(.*?)<\/em>/g, '*$1*');}
- 测试代码:
javascriptconst html = '<h1>Test</h1><p>This is <strong>bold</strong> and <em>italic</em>.</p>';console.log(htmlToMarkdown(html));
- 验证:输出:
markdown# TestThis is **bold** and *italic*.
注意:正则方法对复杂HTML(如嵌套标签)易出错,仅限简单场景。
优化建议
为高效实现HTML转Markdown:
- 选择合适的工具:
- 批量转换:Pandoc,功能全面。
- Web集成:Turndown,轻量灵活。
- 快速测试:在线工具,无需安装。
- 预处理HTML:使用
jsdom
清理无效标签:javascriptconst { JSDOM } = require('jsdom');const dom = new JSDOM(html);const cleanHtml = dom.window.document.body.innerHTML; - 自定义规则:为Turndown添加规则,处理特定标签:
javascriptturndownService.addRule('table', {filter: 'table',replacement: () => '<!-- Table not supported -->'});
- 自动化脚本:批量转换文件夹中的HTML文件:
bashfor file in *.html; do pandoc -f html -t markdown -o "${file%.html}.md" "$file"; done
- 验证输出:使用
markdownlint
检查Markdown格式:bashnpm install -g markdownlint-climarkdownlint output.md
HTML转Markdown 是简化内容编辑和跨平台发布的必备技能。
通过Pandoc的强大功能、Turndown的JavaScript集成、html2markdown的Python脚本、在线工具的便捷、Marked的动态处理和正则表达式的灵活性,可以应对从单文件到批量转换的各种场景。
0
点个赞 ~