干货|自研基于API实现有道云笔记全格式导出

基于有道云笔记 Web API,递归导出所有笔记为可编辑的 Markdown 文件,完整保持目录结构。

功能特性

特性 说明
认证方式 Cookie 登录(从浏览器复制)
支持格式 .md(直接保存)、XML、JSON、HTML → 全部转为 Markdown
目录结构 完整保持有道云笔记的原始目录层级
增量导出 默认跳过已存在的文件,--no-skip 强制覆盖
限流保护 每次请求间隔 150ms,避免触发限制

环境要求

  • Python 3.7+
  • 依赖库:requests
pip install requests

获取 Cookies

脚本通过浏览器 Cookie 认证访问有道云笔记 API,需要手动导出 Cookie:

  1. 浏览器登录 note.youdao.com
  2. F12 打开开发者工具
  3. 进入 ApplicationCookiesnote.youdao.com
  4. 找到以下关键 Cookie:
    • YNOTE_CSTK(必需,CSRF 验证令牌)
    • YNOTE_SESS(必需,会话标识)
    • YNOTE_LOGIN(必需,登录状态)
    • 其他 YNOTE_* 开头的 Cookie 也建议一并复制
  5. 将 Cookie 保存为 cookies.json 文件

💡 也可以使用浏览器扩展 EditThisCookie 一键导出 JSON 格式。

cookies.json 格式

支持两种格式,任选其一:

格式一:数组格式(推荐)

{
    "cookies": [
        ["YNOTE_CSTK", "cstk值", ".youdao.com", "/"],
        ["YNOTE_SESS", "sess值", ".youdao.com", "/"],
        ["YNOTE_LOGIN", "login值", ".youdao.com", "/"]
    ]
}

格式二:字典格式

{
    "YNOTE_CSTK": "cstk值",
    "YNOTE_SESS": "sess值",
    "YNOTE_LOGIN": "login值"
}

GitHub仓库:youdaonote_export.py 

项目地址:youdaonote_export.py

使用方法

基本用法

# 导出全部笔记到 youdao_notes_export 目录
python3 youdao_note_export.py -c cookies.json

完整参数

用法: python3 youdao_note_export.py [选项]

选项:
  -h, --help            显示帮助信息
  -c, --cookies PATH    Cookies JSON 文件路径(默认: cookies.json)
  -o, --output DIR      导出输出目录(默认: youdao_notes_export)
  -d, --dir NAME        只导出指定的有道云笔记顶层目录名(默认: 全部)
  --no-skip             不跳过已存在的文件,强制重新导出
  -v, --verbose         显示详细日志

使用示例

# 导出全部笔记
python3 youdao_note_export.py -c cookies.json -o ./my_notes

# 只导出名为"我的笔记"的目录
python3 youdao_note_export.py -c cookies.json -o ./my_notes -d "我的笔记"

# 强制重新导出所有笔记(不跳过已有文件)
python3 youdao_note_export.py --no-skip -v

# 指定 Cookie 文件路径和输出目录
python3 youdao_note_export.py -c ~/Desktop/cookies.json -o ~/Desktop/youdao_backup

导出效果

导出后的目录结构与有道云笔记完全一致:

youdao_notes_export/
├── 我的笔记/
│   ├── 学习笔记/
│   │   ├── 基于MimoLLM大模型训练.md
│   │   ├── RestAPI开发者详解.md
│   │   └── LLM算法笔记.md
│   ├── 工作记录/
│   │   ├── 周报 2024-01.md
│   │   └── 会议纪要.md
│   └── 随手记.md
├── 旅行攻略/
│   ├── 泰国自由行.md 
│   └── 苏州西山自驾行.md 
└── 技术收藏/
    └── Ceph分布式存储技术详解.md

运行日志示例

14:30:01 [INFO] ✅ Cookies 加载成功,YNOTE_CSTK=a1b2c3d4...
14:30:01 [INFO] 📁 根目录 ID: Wf8d9a...
14:30:01 [INFO] 🚀 开始导出到: /home/richard/youdao_notes_export
14:30:01 [INFO] 📂 我的笔记/
14:30:02 [INFO] 📂 我的笔记/学习笔记/
14:30:02 [INFO] ✅ 我的笔记/学习笔记/基于MimoLLM大模型训练.md (3245 bytes)
14:30:03 [INFO] ✅ 我的笔记/学习笔记/RestAPI开发者详解.md (1872 bytes)
14:30:04 [INFO] ✅ 我的笔记/随手记.md (512 bytes)
14:30:04 [INFO] 📂 旅行攻略/
14:30:05 [INFO] ✅ 旅行攻略/泰国自由行.md (4096 bytes)
14:30:05 [INFO] ==================================================
14:30:05 [INFO] 📊 导出完成!
14:30:05 [INFO]    📁 目录数: 3
14:30:05 [INFO]    📝 笔记数: 5
14:30:05 [INFO]    ⏭️  跳过数: 0
14:30:05 [INFO]    ❌ 错误数: 0
14:30:05 [INFO]    📍 输出路径: /home/richard/youdao_notes_export
14:30:05 [INFO] ==================================================

API 原理

脚本基于有道云笔记 Web 端逆向 API,通过浏览器 Cookie 认证访问以下三个核心接口:

接口 方法 用途
/yws/api/personal/file?method=getByPath POST 获取根目录 ID
/yws/api/personal/file/{id}?method=listPageByParentId GET 列出目录下所有文件和子目录
/yws/api/personal/sync?method=download POST 下载笔记原始内容

所有请求通过 YNOTE_CSTK Cookie 进行 CSRF 验证。笔记内容根据编辑器类型返回不同格式:

  • .md 笔记:直接返回 Markdown 文本
  • XML 格式:较早版本编辑器生成,使用 xml.etree.ElementTree 解析并转换
  • JSON 格式:较新版本编辑器生成,解析 JSON 结构并按类型映射为 Markdown
  • HTML 格式:使用 markdownify 库转换(需额外安装)

笔记格式转换对照

有道笔记格式 Markdown 转换结果
标题 (h1-h6) # ~ ######
粗体 **文本**
斜体 *文本*
代码块 ```lang ... ```
引用 > 文本
有序列表 1. 文本
无序列表 - 文本
待办事项 - [ ] 文本
图片 ![alt](url)
附件 [filename](url)
表格 Markdown 表格语法
分割线 ---
链接 [text](url)

常见问题

Q: 报错 YNOTE_CSTK 字段为空

请检查 cookies.json 中是否包含 YNOTE_CSTK 字段。该字段是必需的 CSRF 令牌。

Q: 导出后内容为空或乱码

可能是 Cookie 已过期,请重新登录有道云笔记并重新导出 Cookie。

Q: 请求被限流 / 429 错误

脚本已内置 150ms 请求间隔。如果仍被限流,可以修改脚本中的 time.sleep(0.15) 增大间隔值。

Q: 如何只导出某个目录?

使用 -d 参数指定目录名:

python3 youdao_note_export.py -c cookies.json -d "我的笔记"

运行时会列出所有顶层目录供参考。

Q: HTML 格式笔记转换报错

安装 markdownify 库:

pip install markdownify

致谢

API 接口逆向参考自 DeppWang/youdaonote-pull(MIT License),本脚本在此基础上进行了重写和增强。

许可证

MIT License

上一篇
下一篇