电子书库数据机制一次看明白:24071 本书到实时搜索的完整链路
【免费下载链接】ebook-treasure-chest欢迎来到电子书下载宝库,一个汇聚了各类电子书下载链接的地方。无论你是喜欢阅读经典文学、经管励志、终身学习、职场创业、技术手册还是其他类型的书籍,这里都能满足你的需求。 该库涵盖了帆书app(原樊登读书)、微信读书、京东读书、喜马拉雅等读书app的大部分电子书。项目地址: https://gitcode.com/GitHub_Trending/eb/ebook-treasure-chest
24071 条电子书下载链接、1000 个标签书单、一个始终可用的搜索框——这是 ebook-treasure-chest(电子书下载宝库)目前的规模。下面所有数字都来自仓库里的解析统计文件:1000 个 md 文件,0 个解析失败,成功率 100%。这篇文章只讲一件事:这么大的数据怎么进仓库、怎么整理、怎么被搜索,以及这个库凭什么能一直维护下去。
书库覆盖帆书(原樊登读书)、微信读书、京东读书、喜马拉雅等读书 app 的大部分书籍,每本书都提供 epub、mobi、azw3 三种常见格式的下载链接。书籍按标签组织成md/目录下的书单文件,比如 md/文学.md、md/历史.md。解析统计给出的规模如下:
| 指标 | 数值 |
|---|---|
| 已解析书目总数 | 24071 本 |
| 标签分类数 | 1000 个 |
| 解析成功率 | 1000/1000 文件,0 失败 |
| 记录的最大书籍 ID | 64970 |
书目数最多的前 6 个标签:
| 标签 | 书目数 |
|---|---|
| 文学 | 2711 |
| 历史 | 1748 |
| 科普 | 743 |
| 管理 | 613 |
| 社会 | 558 |
| 推理 | 531 |
注意 24071 是所有书单文件的书条目合计,一本带多个标签的书会分别计入对应的多个书单。
全量重建的三步流程:备份、定位最大 ID、分批抓取带断点续传
整个项目最重的部分是 scripts/sync/ 目录下的同步管道。全量同步由 sync_all_books.py 负责,一键入口是 run_full_sync.sh,它会先检查配置文件(源站点域名BOOK_SITE_DOMAIN)再执行。流程分三步:
- 先备份:backup_md.py 把整个 md/ 目录复制到
md_backup/,目录名带时间戳。后续抓取出问题时,直接从这里恢复。 - 定位最大书籍 ID:源站给每本书一个自增 ID。find_max_book_id.py 先从首页的书籍链接里提取 ID;找不到就在 1–100000 区间做二分查找。结果写入仓库根的 max_book_id_found.txt。
- 分批抓取并生成书单:test_batch_sync.py 按 ID 抓取书籍详情页,20 个并发、每请求间隔 0.5 秒,超时保护 600 分钟;支持按每批 2 万分批、批间暂停 5 秒;已处理的 ID 会落盘,中断后下次运行自动跳过,也就是断点续传。
抓取完成后,每本书被写入对应标签的书单。生成书单里还有一个保护细节:包含源站域名的链接不会写进 md 文件,只保留网盘的真实下载链接,避免敏感域名泄露到公开仓库。
🔁 增量同步为什么只抓 64970 之后的新书
全量同步要处理 6 万多条数据、跑上几个小时,日常更新不可能次次这么干。
incremental_sync.py 只有四步:
- 读取上次同步到的最大 ID(批量脚本每次运行后会记录在
md/max_book_id.json); - 再访问源站首页,拿到当前的最大 ID;
- 如果当前最大 ID 不大于上次,直接结束——没有新书;
- 否则,只抓取「上次最大 ID + 1」到「当前最大 ID」这一段区间。
仓库根目录的 max_book_id_found.txt 当前记录64970,意味着源站已有 64970 个书号,日常增量只需处理上次同步之后新出现的部分。全量同步的成本是 6 万+ 次请求,增量同步只处理差值 🔑 这是长期可维护的关键。
增量同步成功后,同样会更新 README 的热门分类章节并重新生成搜索数据,与全量一致。
两级解析:从 md 书单到 6.8MB 的可搜索 JSON
md 书单是"给人读"的数据,搜索页需要"给机器读"的数据。两级解析完成这次转换。
第一级:md → JSON。parse_md_to_json.py 遍历全部 1000 个 md 文件,从每一行表格里抽出书名、作者、下载链接,补上标签、语言、格式字段,写入 docs/all-books.json;同时把解析统计写进 docs/parse-stats.json——开头的"1000/1000 成功"就是这里的产出。
第二级:JSON → 页面。generate_index.py 读取这份 JSON,生成两个产物:
- docs/index.html:完整搜索页面,包含统计概览和热门分类书单(前 20 个热门分类,每类最多 10 本);
- docs/books.json:一份书目数据副本,留给搜索页降级用。
最终的 all-books.json 与 books.json 各约 6.8MB。
搜索页:多关键词与匹配和两级数据降级
先看一下搜索页的实际效果:
搜索页是纯前端实现,逻辑在 docs/search.js,页面会提前预加载数据文件与脚本:
- 加载数据:优先加载 all-books.json,加载完成后在搜索框里提示已加载的本数;
- 多关键词:空格分隔多个关键词,每个关键词都必须命中(可命中书名、作者、分类中的任意一个),结果上限 100 条;
- 高亮与安全:命中文字用
<mark>标记,所有文本做 HTML 转义,链接只允许 http/https 协议。
最关键的设计是两级降级:先试 all-books.json,失败后自动改用 books.json,两者都失败才提示用户加载失败。页面里本身还内置了热门分类书单,即使数据加载失败,页面也不会空白。
长期维护:低成本更新管道与公开的赞助记账
这个库凭什么能一直维护下去?看两面。
成本面:全量重建只在首次构建或站点结构变化时发生;日常更新靠增量同步,只处理差值。抓取、解析、索引生成、页面生成整条链路全部脚本化,一条命令就能完成一轮更新。
动力面:sponsors.md 是一份公开的赞助记录,每笔小额赞助都按日期、姓名、金额、留言记入表格。名单目前有 15 条记录,从 2025 年 9 月延续到 2026 年 11 月,最低 1 元;连"学生党没有多少钱,请您喝杯可乐"这样 3 元的留言也被完整保留。
这种"小额、高频、公开"的记账方式,让维护者拿到的不只是资金,还有持续的正向反馈。更新成本低加上反馈公开,就是一个免费书库能持续转动的土壤。
快速开始:克隆电子书库与常用文件速查
如果想在本地运行或二次开发,先克隆仓库:
git clone https://gitcode.com/GitHub_Trending/eb/ebook-treasure-chest常用文件速查:
| 路径 | 用途 |
|---|---|
| README.md | 项目说明、热门分类索引 |
| sponsors.md | 赞助人公开名单 |
| md/ | 按标签组织的书单 |
| scripts/sync/ | 全量/增量同步与备份脚本 |
| scripts/parse_md_to_json.py | md 书单 → JSON 解析 |
| scripts/generate_index.py | 生成搜索页与索引 |
| docs/ | 在线搜索页面与数据文件 |
| max_book_id_found.txt | 最大书籍 ID 记录 |
回到开头的问题:一个免费的电子书库怎么一直转下去?答案藏在管道里——全量重建负责冷启动,增量同步把日常更新压缩成"只抓 64970 之后的新书",两级降级保证搜索页始终可用;每次更新都足够便宜,每一份支持都被公开记在名单上。低成本加公开反馈,这套组合就是它长期维护的完整机制。
【免费下载链接】ebook-treasure-chest欢迎来到电子书下载宝库,一个汇聚了各类电子书下载链接的地方。无论你是喜欢阅读经典文学、经管励志、终身学习、职场创业、技术手册还是其他类型的书籍,这里都能满足你的需求。 该库涵盖了帆书app(原樊登读书)、微信读书、京东读书、喜马拉雅等读书app的大部分电子书。项目地址: https://gitcode.com/GitHub_Trending/eb/ebook-treasure-chest
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考