Z-Library 到 NotebookLM 自动化工具技术分析
一、项目概述
1. 项目背景
Z-Library 是全球最大的数字图书馆之一,拥有海量的书籍资源。Google NotebookLM 是 Google 推出的 AI 驱动笔记工具,支持上传文档并进行智能问答。本项目旨在自动化将 Z-Library 书籍下载并上传到 NotebookLM 的流程,实现两个平台的无缝衔接。
2. 核心价值
A. 解决的问题
- 手动下载书籍效率低下
- 格式转换繁琐(PDF、EPUB 等)
- NotebookLM 上传步骤复杂
- 大文件上传容易失败
B. 创新点
- 一次登录,永久使用
- 智能格式选择与转换
- 自动文件分块处理
- Claude Code Skill 原生集成
二、系统架构
1. 整体架构
graph TB
User[用户] -->|提供 Z-Library URL| Claude[Claude Code / CLI]
Claude -->|启动| Login[登录模块]
Login -->|保存会话| Session[storage_state.json]
Claude -->|调用| Download[下载模块]
Download -->|Playwright| Browser[Chromium 浏览器]
Browser -->|访问| ZLib[Z-Library 网站]
ZLib -->|下载| File[书籍文件 PDF/EPUB]
File -->|转换| Convert[格式转换模块]
Convert -->|EPUB→MD| Markdown[Markdown 文件]
File -->|直接使用| PDF[PDF 文件]
Markdown -->|检查大小| Chunk[分块模块]
PDF -->|检查大小| Chunk
Chunk -->|分割| Parts[多个文件块]
Parts -->|上传| NotebookLM[Google NotebookLM]
NotebookLM -->|返回| ID[笔记本 ID]
ID -->|反馈| User2. 组件说明
- 登录模块:处理 Z-Library 身份验证,保存会话状态
- 下载模块:使用 Playwright 浏览器自动化下载书籍
- 格式转换模块:将 EPUB 转换为 Markdown
- 分块模块:智能分割大文件,确保上传成功
- 上传模块:调用 NotebookLM CLI 上传内容
三、核心功能实现
1. 会话持久化
A. 实现原理
使用 Playwright 的 storage_state 功能保存浏览器会话:
sequenceDiagram
participant U as 用户
participant L as login.py
participant B as 浏览器
participant Z as Z-Library
U->>L: 执行 python3 scripts/login.py
L->>B: 启动 Chromium
B->>Z: 访问登录页面
Z-->>B: 显示登录表单
B-->>U: 打开浏览器窗口
U->>B: 手动完成登录
U->>L: 终端按 ENTER
L->>B: 保存 storage_state
B->>L: 返回 cookies 和 localStorage
L->>L: 写入 ~/.zlibrary/storage_state.json
L-->>U: 会话已保存B. 技术细节
- 存储位置:~/.zlibrary/storage_state.json
- 包含内容:cookies、localStorage、sessionStorage
- 复用方式:load_storage_state() 加载已保存状态
2. 智能格式处理
A. 格式优先级
graph LR
A[书籍页面] --> B{检查可用格式}
B -->|有 PDF| C[下载 PDF]
B -->|无 PDF 有 EPUB| D[下载 EPUB]
B -->|其他格式| E[下载原格式]
C --> F{检查文件大小}
D --> G[转换为 Markdown]
E --> H[尝试转换]
G --> F
H --> G
F -->|≤350k 词| I[直接上传]
F -->|>350k 词| J[智能分块]
J --> K[逐块上传]
B. EPUB 转换实现
使用 ebooklib 库解析 EPUB 结构:
graph TD
A[EPUB 文件] --> B[ebooklib 读取]
B --> C[解析章节]
C --> D[提取文本内容]
D --> E[转换为 Markdown]
E --> F[统计词数]
F --> G{词数判断}
G -->|≤350k| H[单文件输出]
G -->|>350k| I[按章节分割]
I --> J[生成多个文件]3. 智能分块策略
A. 分块触发条件
- 官方限制:500,000 词
- 安全阈值:350,000 词
- 预留余量:避免 CLI 超时
B. 分块算法
graph TD
A[检测文件词数] --> B{>350k?}
B -->|否| C[直接使用]
B -->|是| D[计算分块数量]
D --> E[n = ceil(总词数 / 350k)]
E --> F[按章节分割]
F --> G[确保每块 ≤350k]
G --> H[生成文件名: Part_1, Part_2...]
H --> I[逐个上传到同一笔记本]
C. 分块示例
处理一部 270 万词的书籍:
输入:2,700,000 词
阈值:350,000 词/块
计算:ceil(2,700,000 / 350,000) = 8 块
输出:
- Part_1.md: 342,000 词
- Part_2.md: 338,000 词
- Part_3.md: 335,000 词
- ...
- Part_8.md: 350,000 词四、技术实现细节
1. 依赖项
| 依赖 | 版本 | 用途 |
|---|---|---|
| Python | 3.8+ | 运行环境 |
| playwright | 最新 | 浏览器自动化 |
| ebooklib | 最新 | EPUB 处理 |
| NotebookLM CLI | 最新 | Google 官方 CLI |
2. 项目结构
zlibrary-to-notebooklm/
├── SKILL.md # Skill 核心定义
├── package.json # npm 配置
├── skill.yaml # Skill 配置
├── requirements.txt # Python 依赖
├── scripts/
│ ├── login.py # 登录脚本
│ ├── upload.py # 下载+上传脚本
│ └── convert_epub.py # EPUB 转换工具
├── docs/
│ ├── WORKFLOW.md # 工作流程详解
│ └── TROUBLESHOOTING.md # 故障排除
└── INSTALL.md # 安装指南3. 关键代码逻辑
A. 登录流程
# 伪代码示意
def login():
# 启动浏览器
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# 访问 Z-Library
page = context.new_page()
page.goto("https://zh.zlib.li/")
# 等待用户手动登录
input("登录成功后按 ENTER...")
# 保存会话
context.storage_state(path="~/.zlibrary/storage_state.json")B. 下载与上传流程
# 伪代码示意
def upload_book(zlib_url):
# 加载会话
context = browser.new_context(
storage_state="~/.zlibrary/storage_state.json"
)
# 访问书籍页面
page.goto(zlib_url)
# 智能选择格式
if has_pdf_link():
download_pdf()
else:
download_epub()
convert_to_markdown()
# 检查并分块
if word_count > 350000:
chunks = split_file()
# 上传到 NotebookLM
notebook_id = create_notebook()
for chunk in chunks:
upload_to_notebook(notebook_id, chunk)
return notebook_id五、Claude Skill 集成
1. Skill 架构
graph LR
User[用户指令] --> Skill[Skill 触发器]
Skill --> SKILL[SKILL.md]
SKILL --> Scripts[scripts/*.py]
Scripts --> Output[执行结果]
Output --> Claude[Claude Code]
Claude --> User[返回结果]2. 使用方式
A. 安装为 Skill
cd ~/.claude/skills
git clone https://github.com/zstmfhy/zlibrary-to-notebooklm.git zlib-to-notebooklm
cd zlib-to-notebooklm
python3 scripts/login.pyB. 调用方式
在 Claude Code 中直接对话:
用 zlib-to-notebooklm skill 处理这个 Z-Library 链接:
https://zh.zlib.li/book/25314781/aa05a1/书名Claude 会自动完成整个流程并返回笔记本 ID。
六、限制与优化
1. NotebookLM 限制
| 限制类型 | 官方值 | 实际安全值 | 原因 |
|---|---|---|---|
| 单文件大小 | 200MB | 150MB | 预留余量 |
| 每来源词数 | 500,000 | 350,000 | CLI 超时问题 |
2. 优化措施
A. 格式优先级
- PDF 优先:保留原始排版
- EPUB 备选:转换为 Markdown
- 灵活降级:确保总有可用格式
B. 分块策略
- 按章节分割:保持内容完整性
- 智能阈值:350k 词安全上限
- 批量上传:自动上传所有分块
C. 会话管理
- 一次登录:永久复用
- 自动检测:会话失效提醒
- 简单重登:删除会话文件重新登录
七、安全性考虑
1. 免责声明
项目明确声明仅供学习、研究和技术演示使用,要求用户:
- 仅处理合法访问的资源
- 遵守当地版权法律
- 尊重知识产权
2. 数据隐私
- 会话文件存储在本地
- 不上传任何用户凭证
- 浏览器数据完全可控
八、使用场景
1. 学术研究
- 快速收集参考文献
- AI 辅助论文写作
- 文献对比分析
2. 技术学习
- 技术书籍整理
- 代码示例提取
- 知识点问答
3. 个人知识库
- 构建主题笔记
- 跨书籍关联
- 定期复习回顾
九、技术亮点
1. 全自动化
- 一条命令完成全流程
- 无需手动干预
- 批量处理支持
2. 智能化
- 自动格式选择
- 智能文件分块
- 会话持久化
3. 原生集成
- Claude Code Skill
- 自然语言交互
- 无缝工作流
4. 稳定性
- 处理大文件
- 容错机制
- 状态恢复
十、未来展望
1. 功能扩展
- 支持更多电子书平台
- 多语言翻译集成
- 自动摘要生成
2. 性能优化
- 并发下载
- 增量同步
- 缓存机制
3. 用户体验
- 图形化界面
- 进度可视化
- 错误提示优化
参考资料
- zlibrary-to-notebooklm GitHub 仓库 - 官方项目代码
- Z-Library 官方网站 - 数字图书馆平台
- Google NotebookLM - AI 笔记工具
- Playwright 官方文档 - 浏览器自动化框架
- Claude Code Skills 文档 - Claude Code 技能系统