Loading... # Z-Library 到 NotebookLM 自动化工具技术分析 # 一、项目概述 ## 1. 项目背景 Z-Library 是全球最大的数字图书馆之一,拥有海量的书籍资源。Google NotebookLM 是 Google 推出的 AI 驱动笔记工具,支持上传文档并进行智能问答。本项目旨在自动化将 Z-Library 书籍下载并上传到 NotebookLM 的流程,实现两个平台的无缝衔接。 ## 2. 核心价值 ### A. 解决的问题 - 手动下载书籍效率低下 - 格式转换繁琐(PDF、EPUB 等) - NotebookLM 上传步骤复杂 - 大文件上传容易失败 ### B. 创新点 - 一次登录,永久使用 - 智能格式选择与转换 - 自动文件分块处理 - Claude Code Skill 原生集成 # 二、系统架构 ## 1. 整体架构 ```mermaid 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 -->|反馈| User ```  ## 2. 组件说明 - 登录模块:处理 Z-Library 身份验证,保存会话状态 - 下载模块:使用 Playwright 浏览器自动化下载书籍 - 格式转换模块:将 EPUB 转换为 Markdown - 分块模块:智能分割大文件,确保上传成功 - 上传模块:调用 NotebookLM CLI 上传内容 # 三、核心功能实现 ## 1. 会话持久化 ### A. 实现原理 使用 Playwright 的 storage_state 功能保存浏览器会话: ```mermaid 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. 格式优先级 ```mermaid 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 结构: ```mermaid 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. 分块算法 ```mermaid 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. 登录流程 ```python # 伪代码示意 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. 下载与上传流程 ```python # 伪代码示意 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 架构 ```mermaid graph LR User[用户指令] --> Skill[Skill 触发器] Skill --> SKILL[SKILL.md] SKILL --> Scripts[scripts/*.py] Scripts --> Output[执行结果] Output --> Claude[Claude Code] Claude --> User[返回结果] ```  ## 2. 使用方式 ### A. 安装为 Skill ```bash cd ~/.claude/skills git clone https://github.com/zstmfhy/zlibrary-to-notebooklm.git zlib-to-notebooklm cd zlib-to-notebooklm python3 scripts/login.py ``` ### B. 调用方式 在 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. 用户体验 - 图形化界面 - 进度可视化 - 错误提示优化 *** ## 参考资料 1. [zlibrary-to-notebooklm GitHub 仓库](https://github.com/zstmfhy/zlibrary-to-notebooklm) - 官方项目代码 2. [Z-Library 官方网站](https://zh.zlib.li/) - 数字图书馆平台 3. [Google NotebookLM](https://notebooklm.google.com/) - AI 笔记工具 4. [Playwright 官方文档](https://playwright.dev/) - 浏览器自动化框架 5. [Claude Code Skills 文档](https://claude.ai/claude-code) - Claude Code 技能系统 最后修改:2026 年 01 月 19 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏