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 -->|反馈| User

系统架构图

2. 组件说明

  • 登录模块:处理 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[生成多个文件]

EPUB 转换流程

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. 依赖项

依赖版本用途
Python3.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[返回结果]

Skill 架构图

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.py

B. 调用方式

在 Claude Code 中直接对话:

用 zlib-to-notebooklm skill 处理这个 Z-Library 链接:
https://zh.zlib.li/book/25314781/aa05a1/书名

Claude 会自动完成整个流程并返回笔记本 ID。

六、限制与优化

1. NotebookLM 限制

限制类型官方值实际安全值原因
单文件大小200MB150MB预留余量
每来源词数500,000350,000CLI 超时问题

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 仓库 - 官方项目代码
  2. Z-Library 官方网站 - 数字图书馆平台
  3. Google NotebookLM - AI 笔记工具
  4. Playwright 官方文档 - 浏览器自动化框架
  5. Claude Code Skills 文档 - Claude Code 技能系统
最后修改:2026 年 01 月 19 日
如果觉得我的文章对你有用,请随意赞赏