ProcessOn 思维导图转化md文件

项目前景

  1. 最近在接触到drissionpage 这个包,特别好用,试用监听数据包功能。
  2. 自学js逆向,把图灵的大纲下载为本地md文件方便查看。

思路

  1. 获取思维导图数据的原始格式,json格式。
  2. 解析json

代码

from DrissionPage import ChromiumPage
import json


def parse_mindmap_to_md(data, level=0, is_root=True):
    """
    递归解析思维导图数据为 Markdown 格式。
    支持分类出标题和文件名称。
    父节点的 note 属性作为文本信息附加到标题下。
    """
    md = ""

    # 根节点处理为文件名
    if is_root:
        md += f"# {data['title']}\n\n"
    else:
        # 如果是叶子节点,作为文件信息而非标题
        if not data.get("children"):
            md += f"{data['title']}\n\n"
        else:
            # 子节点处理为 Markdown 标题
            indent = "#" * level  # 每一层级对应的标题等级
            md += f"{indent} {data['title']}\n\n"
            # 添加父节点的文本信息
            if "note" in data:
                md += f"> {data['note'].strip()}\n\n"

    for child in data.get("children", []):
        md += parse_mindmap_to_md(child, level + 1, is_root=False)

    return md


# 解析主函数
def convert_mindmap_json_to_md(json_data):
    """
    将思维导图 JSON 数据解析为 Markdown 格式。
    """
    data = json.loads(json_data)
    if not isinstance(data, dict) or not data.get("root"):
        raise ValueError("Invalid mindmap data: Root element is missing.")

    md_content = parse_mindmap_to_md(data)
    return md_content


def get_json(url):
    cp = ChromiumPage()
    cp.listen.start('/api/personal/view/link/def')
    cp.get(url)
    title = cp.title
    data = next(cp.listen.steps()).response.body
    cp.close()
    return title, data['data']['def']


if __name__ == '__main__':
    url = 'https://www.processon.com/view/link/65658d2f1f333817f6ebb98e'
    output_path = './'
    title, json_data = get_json(url)
    title = title.split('|')[0]
    print(title,type(json_data))
    md_result = convert_mindmap_json_to_md(json_data)
    with open(f"{output_path}{title}.md", "w", encoding="utf-8") as f:
        f.write(md_result)

多多指导,谢谢各位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值