基于有道云笔记 Web API,递归导出所有笔记为可编辑的 Markdown 文件,完整保持目录结构。
功能特性
| 特性 | 说明 |
|---|---|
| 认证方式 | Cookie 登录(从浏览器复制) |
| 支持格式 | .md(直接保存)、XML、JSON、HTML → 全部转为 Markdown |
| 目录结构 | 完整保持有道云笔记的原始目录层级 |
| 增量导出 | 默认跳过已存在的文件,--no-skip 强制覆盖 |
| 限流保护 | 每次请求间隔 150ms,避免触发限制 |
环境要求
- Python 3.7+
- 依赖库:
requests
pip install requests
获取 Cookies
脚本通过浏览器 Cookie 认证访问有道云笔记 API,需要手动导出 Cookie:
- 浏览器登录 note.youdao.com
- 按 F12 打开开发者工具
- 进入 Application → Cookies →
note.youdao.com - 找到以下关键 Cookie:
YNOTE_CSTK(必需,CSRF 验证令牌)YNOTE_SESS(必需,会话标识)YNOTE_LOGIN(必需,登录状态)- 其他
YNOTE_*开头的 Cookie 也建议一并复制
- 将 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. 文本 |
| 无序列表 | - 文本 |
| 待办事项 | - [ ] 文本 |
| 图片 |  |
| 附件 | [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
.png)

的技术概念与应用-scaled.jpg)