Logo

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

author
YGHub·2025-05-12·0·字数:1168 字·阅读时间:4 分钟

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,处理复杂结构(如表格、嵌套列表)效果出色。

实现方法

  1. 安装Pandoc:
    bash
    sudo apt install pandoc # Debian/Ubuntu
    sudo dnf install pandoc # RedHat/Fedora
     
  2. 准备HTML文件(input.html):
    html
    <h1>Hello</h1>
    <p>This is a <strong>test</strong>.</p>
     
  3. 转换命令:
    bash
    pandoc -f html -t markdown -o output.md input.html
     
  4. 验证:检查output.md
    markdown
    # Hello
     
    This is a **test**.
     

注意:Pandoc支持多种Markdown变体,可用--to markdown_strict指定严格格式。

方法2:使用Turndown JavaScript库

为什么使用? Turndown是轻量级的JavaScript库,适合前端或Node.js项目,易于集成到Web应用。

实现方法

  1. 安装Turndown:
    bash
    npm install turndown
     
  2. 编写转换代码:
    javascript
    const 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);
     
  3. 验证:输出:
    markdown
    # Title
     
    Paragraph with *emphasis*.
     

注意:Turndown支持自定义规则,可处理复杂HTML标签。

方法3:使用html2markdown Python库

为什么使用? html2markdown是Python生态的轻量工具,适合脚本自动化,易于批量处理。

实现方法

  1. 安装html2markdown:
    bash
    pip install html2markdown
     
  2. 编写转换代码:
    python
    import html2markdown
     
    html = '<h2>Subtitle</h2><ul><li>Item 1</li><li>Item 2</li></ul>'
    markdown = html2markdown.convert(html)
    print(markdown)
     
  3. 验证:输出:
    markdown
    ## Subtitle
     
    - Item 1
    - Item 2
     

注意:对复杂HTML(如内联样式)支持有限,建议预处理HTML。

方法4:使用在线转换工具

为什么使用? 在线工具(如htmltomarkdown.com)无需安装,适合快速转换少量HTML内容。

实现方法

  1. 访问htmltomarkdown.com
  2. 粘贴HTML代码:
    html
    <h3>Quick Test</h3><p>Simple <a href="#link">link</a>.</p>
     
  3. 点击“Convert”按钮,获取Markdown。
  4. 验证:输出:
    markdown
    ### Quick Test
     
    Simple [link](#link).
     

注意:在线工具适合临时使用,批量转换推荐命令行工具。

方法5:使用Marked结合Turndown

为什么使用? Marked解析HTML到DOM,结合Turndown转换到Markdown,适合动态网页内容处理。

实现方法

  1. 安装Marked和Turndown:
    bash
    npm install marked turndown
     
  2. 编写转换代码:
    javascript
    const { 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);
     
  3. 验证:输出:
    markdown
    # Dynamic
     
    Content
     

注意:Marked可预处理HTML,适合抓取网页内容。

方法6:自定义正则表达式转换

为什么使用? 正则表达式适合简单HTML转换,灵活但需手动定义规则,适合特定场景。

实现方法

  1. 编写正则转换函数:
    javascript
    function 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*');
    }
     
  2. 测试代码:
    javascript
    const html = '<h1>Test</h1><p>This is <strong>bold</strong> and <em>italic</em>.</p>';
    console.log(htmlToMarkdown(html));
     
  3. 验证:输出:
    markdown
    # Test
     
    This is **bold** and *italic*.
     
     

注意:正则方法对复杂HTML(如嵌套标签)易出错,仅限简单场景。

优化建议

为高效实现HTML转Markdown

  1. 选择合适的工具
    • 批量转换:Pandoc,功能全面。
    • Web集成:Turndown,轻量灵活。
    • 快速测试:在线工具,无需安装。
  2. 预处理HTML:使用jsdom清理无效标签:
    javascript
    const { JSDOM } = require('jsdom');
    const dom = new JSDOM(html);
    const cleanHtml = dom.window.document.body.innerHTML;
     
  3. 自定义规则:为Turndown添加规则,处理特定标签:
    javascript
    turndownService.addRule('table', {
    filter: 'table',
    replacement: () => '<!-- Table not supported -->'
    });
     
  4. 自动化脚本:批量转换文件夹中的HTML文件:
    bash
    for file in *.html; do pandoc -f html -t markdown -o "${file%.html}.md" "$file"; done
     
  5. 验证输出:使用markdownlint检查Markdown格式:
    bash
    npm install -g markdownlint-cli
    markdownlint output.md
     

HTML转Markdown 是简化内容编辑和跨平台发布的必备技能。

通过Pandoc的强大功能、Turndown的JavaScript集成、html2markdown的Python脚本、在线工具的便捷、Marked的动态处理和正则表达式的灵活性,可以应对从单文件到批量转换的各种场景。

Preview

点个赞 ~

版权申明: © 本文著作权归YGHub所有,未经YGHub网授权许可,禁止第三方以任何形式转载和使用本文内容。