ZetCode

Python markitdown

最后修改于 2025 年 2 月 24 日

在本文中,我们将展示如何在 Python 中使用 markitdown 库。markitdown 库是一个轻量级的 Markdown 解析器和渲染器,可将 Markdown 文本转换为 HTML。它特别适用于从 Markdown 文件或字符串生成 HTML 内容。

markitdown 库易于使用,并提供了一个简单的 API 来解析和渲染 Markdown。

Markdown 是一种轻量级的标记语言,具有纯文本格式的语法。它设计得易于阅读和编写,允许您将纯文本转换为结构化的 HTML。您可以使用它来格式化文本、创建列表、添加链接、插入图像等。

$ pip install markitdown

在使用 markitdown 库之前,您需要使用 pip 安装它。

markitdown 的基本用法

以下示例演示了如何使用 markitdown 库通过内联字符串将 Markdown 文本转换为 HTML。

main.py
import markdown

# Markdown text as an inline string
markdown_text = """
# Heading 1
## Heading 2
### Heading 3

- List item 1
- List item 2
- List item 3

**Bold text** and *italic text*.

[Visit ZetCode](https://zetcode.cn)
"""

# Convert Markdown to HTML
html_output = markdown.markdown(markdown_text)
print(html_output)

在此程序中,markdown.markdown 函数用于将 Markdown 文本转换为 HTML。生成的 HTML 将打印到控制台。

从文件读取 Markdown

以下示例演示了如何使用 markitdown 库从文件读取 Markdown 并将其转换为 HTML。

example2.md
# Example Markdown File

This is a sample Markdown file.

- Item 1
- Item 2
- Item 3

**Bold text** and *italic text*.

这是 example2.md 文件。

main.py
import markdown

# Read Markdown from a file
with open("example.md", "r") as fd:
    markdown_text = fd.read()

# Convert Markdown to HTML
html_output = markdown.markdown(markdown_text)

print(html_output)

在此程序中,Markdown 内容从名为 example.md 的文件读取,并使用 markdown.markdown 函数转换为 HTML。

自定义 HTML 输出

此示例演示了如何使用自定义扩展来修改使用 markdown 库转换 Markdown 时生成的 HTML。

example3.md
# Custom Styled Heading

This is a sample Markdown file with custom styles.

- Item A
- Item B
- Item C

这是 example3.md 文件。

custom_renderer.py
from markdown.treeprocessors import Treeprocessor
from markdown.extensions import Extension

class CustomStyleProcessor(Treeprocessor):
    def run(self, root):
        for elem in root.iter():
            if elem.tag == "h1":
                elem.set("class", "custom-heading")
            elif elem.tag == "li":
                elem.set("class", "custom-item")

class CustomStyleExtension(Extension):
    def extendMarkdown(self, md):
        md.treeprocessors.register(CustomStyleProcessor(md), "custom_style", 10)

CustomStyleProcessor 是一个自定义 Markdown 树处理器,可在输出之前修改生成的 HTML。它遍历解析后的 Markdown 元素,并将自定义 CSS 类应用于特定的 HTML 标签。

main.py
import markdown
from custom_renderer import CustomStyleExtension

# Read Markdown from a file
with open("example_custom.md", "r", encoding="utf-8") as fd:
    markdown_text = fd.read()

# Convert Markdown to HTML with a custom extension
html_output = markdown.markdown(
    markdown_text, 
    extensions=[CustomStyleExtension()]
)

print(html_output)

此程序应用了一个自定义扩展,该扩展为标题和列表项添加了 CSS 类,以便于在 HTML 输出中进行样式设置。

处理扩展

以下示例演示了如何使用 markitdown 库的扩展,通过读取文件中的 Markdown 来添加表格和代码块等附加功能。

example4.md
# Example with Extensions

| Column 1 | Column 2 |
|----------|----------|
| Row 1    | Data 1   |
| Row 2    | Data 2   |

```python
print("Hello there!")
```

这是 example4.md 文件。

main.py
import markdown

# Read Markdown from a file
with open("example4.md", "r", encoding="utf-8") as fd:
    markdown_text = fd.read()

# Convert Markdown to HTML with correct extensions
html_output = markdown.markdown(
    markdown_text,
    extensions=["tables", "fenced_code"]
)

print(html_output)

在此程序中,使用 tablesfenced_code 来启用 Markdown 文本中的表格和代码块渲染。

将 HTML 转换为 Markdown

convert 函数将给定的 HTML 代码转换为 Markdown。

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <h1>Document title</h1>

    <p>
        A simple HTML document.
    </p>
    
</body>
</html>

这是一个简单的 HTML 文档。

main.py
from markitdown import MarkItDown

converter = MarkItDown()
filename = 'index.html'

# Convert HTML to Markdown
mk_content = converter.convert(filename)

print(mk_content.text_content)

该示例利用 convert 函数将一个 HTML 页面转换为 Markdown。

$ py main.py
# Document title

A simple HTML document.

输出仅包含核心元素。

为了获得完整的 HTML 文档,我们需要自己创建它。

main.py
import argparse
import markdown

parser = argparse.ArgumentParser(description="Convert a Markdown file to HTML.")
parser.add_argument("filename", help="The name of the Markdown file to convert")

# Parse arguments
args = parser.parse_args()
mk_file = args.filename

# Read Markdown from the file provided as an argument
with open(mk_file, "r", encoding="utf-8") as fd:
    markdown_text = fd.read()

# Convert Markdown to HTML
body_content = markdown.markdown(markdown_text, tab_length=4)

# Create the full HTML structure
html_output = f"""<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    {body_content}
</body>
</html>"""

print(html_output)

该程序读取作为 CLI 选项给出的文件名内容,将其转换为 HTML,并使用 Python fstring 将其与整个文档结构合并。

使用 LLM

在以下示例中,我们使用 Llama 视觉模型获取图像的描述。我们使用 Groq 服务。

main.py
import os
from markitdown import MarkItDown
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

mid = MarkItDown(llm_client=client, llm_model="llama-3.2-11b-vision-preview")
result = mid.convert("character.png")
print(result.text_content)

llama-3.2-11b-vision-preview 模型具有多模态(视觉)能力,这意味着它可以处理图像输入和文本。

result = mid.convert("character.png")

我们将图像文件名传递给 convert 方法。

来源

Python markitdown - 文档

在本文中,我们展示了如何在 Python 中使用 markitdown 库进行 Markdown 解析和渲染。markitdown 库是从 Markdown 文本生成 HTML 内容的强大工具。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Python 教程