- 项目基于知乎现有接口+TypeScript构建,为知友提供方便的, 以供自己阅读/自身结集整理为目的的, 将知乎内容转为Epub电子书的途径
- 下载软件安装包Windows版/Mac版, 双击安装
- 在
任务输入框
中输入待抓取的网址信息 - 点击
开始执行
按钮 - 执行完毕后会打开电子书所在文件夹, 使用多看阅读或Win10下双击使用Edge浏览器打开均可
- 输出文件
知乎助手输出的电子书\epub
内, 为输出的Epub电子书, 可以直接使用电子书阅读器阅读知乎助手输出的电子书\html
内, 为输出的网页版答案列表html
文件夹中为按回答分割的单个回答页面列表,index.html
为目录页单文件版
文件夹中为整个文件, 可以使用浏览器打开后, 直接打印为PDF书籍
- 使用示例 =>
- 在生成电子书时可能会有卡顿, 根据电子书的体积(100k
2G)卡顿时间在1s1分钟不等, 函请谅解 - 所有图片缓存都会存在安装目录下, 随着制作的电子书数量增加, 体积可能会非常大, 因此建议将软件安装在非系统盘根目录, 体积大了直接删除即可
网址类型 | 描述 | 示例 |
---|---|---|
指定知乎用户的全部提问/回答/想法/赞同过的回答/赞同过的文章/关注过的问题 | 用户个人主页地址 | http://www.zhihu.com/people/yyln2016 |
专栏 | 专栏网址 | http://zhuanlan.zhihu.com/yyln2016 |
文章 | 文章地址 | https://zhuanlan.zhihu.com/p/58653502 |
话题 | 知乎话题地址, 保存话题信息和话题精华中的答案 |
http://www.zhihu.com/topic/20024374 |
问题 | 问题地址 | https://www.zhihu.com/question/26784045 |
回答 | 答案地址 | https://www.zhihu.com/question/26784045/answer/178802510 |
想法 | 想法地址 | https://www.zhihu.com/pin/1013109294408986624 |
收藏夹(公开/私人) | 知乎公开收藏夹地址, 只保存收藏夹信息和收藏夹内的答案, 由于获取不到文章列表, 所以无法保存文章 只能保存所登录账号的私密收藏夹夹 |
http://www.zhihu.com/collection/19555617 |
- 电子书名
- 最终生成的电子书名
- 抓取任务
- 每一项为一个子任务, 最终的电子书是所有子任务的合集
- 排序规则
- 可以按照: 创建时间/更新时间/赞同数/回答数对内容进行排序
- 当有多个排序规则时, 排序优先级按从上到下进行
- 图片质量
- 高清 => 默认值
- 无图 => 完全没有图片
- 原图 => 图片原图, 会导致电子书体积过大, 一般不建议使用
- 自动分卷
- 每本电子书内最多可有的(问题+想法+文章)总数
- 超过该数值会对电子书进行自动分卷, 输出名为"电子书-卷1"/"电子书-卷2"/"电子书-卷3"/etc的n个文件
- 备注
- 用于保存备注信息
- 配置文件内容
- 最终生成的配置文件, debug用
如有bug, 烦请邮件告知
务必附上出现bug时的配置文件哦
- 基础功能
- 抓取用户回答
- 导出用户回答
- 抓取收藏夹
- 导出收藏夹
- 抓取话题精华回答
- 导出话题精华回答
- 自定义抓取问题/回答/文章列表
- 抓取专栏文章
- 导出专栏文章
- 抓取用户行为记录
- 导出用户点赞的所有文章/回答
- 使用基础命令, 派发进程
- 扩展功能
- 导出为单页HTML
- 导出为epub
- 支持通过配置, 按赞同数/创建时间 正序/倒序 导出文章/答案
- 添加升级检测, 从服务器获取cookie
- 添加图形界面, 利用Electron创建图形界面/登陆知乎/生成命令配置
- 利用Electron根据命令启动配置
- 在Electron展示后端运行日志
- 获取问题/回答/文章时, 统一使用标准的answer/article接口进行获取, 保证数据结构一致性(需要了解知乎接口相关参数原理)
- 能够自动读取上一次生成的配置文件, 而不是每次都需要重新输入
- 能够按照赞同/答案长度等指标过滤答案
- 开始运行时在前端界面自动检测升级, 并给与提示
- 导出文件时, 支持自定义配置
- 电子书名
- 应有默认值
- 封面
- 作者
- 电子书名
- todo
- 将type声明改为使用namespace形式进行声明
- 将view改为使用类继承方式进行实现
- 输出目录结构
- 当用户回答为空时, 需要跳过渲染环节
- 解决GUI下看不到运行日志的问题
- 解决GUI版本无法生成epub文件
- 解决GUI版本无法将生成结果从缓存文件夹中复制到输出文件夹中的问题
- 为电子书添加封面
- 解决Edge浏览器下用户头像过大问题
- 解决目录列表页显示有空行的问题
- 解决多看电子书结尾处右下角会换行的问题
- 添加一个tab, 作为使用说明
- 运行日志刷新频率过高会导致页面卡死, 定时刷新需要延长执行时间
- 展示日志应该限制总高度, 每次刷新后应自动滚动到最下方
- 把demo调的正规一点
- 话题支持输出文章&回答(话题列表中同时有回答&文章, 目前为了赶进度, 只渲染的文章)
- 支持分卷(每1000个问题分为一本电子书, 避免文件体积过大)
- 调整回答右下角日期格式, 现在分成了三块, 不好看
- 支持配置项中的功能
- 答案排序
- 创建时间
- 更新时间
- 赞同数
- 评论数
- 由高到低
- 有新到旧
- 图片质量
- 高清
- 原图
- 无图
- 自动分卷
- 1000
- 答案排序
- 只有抓取全部记录才是高频率的抓取, 因此可以设定抓取范围, 按时间范围, 避免频繁抓取
- 验证想法页面是否可以正常渲染
- 优化页面样式
- 启动时检查是否有权限/用户是否被封禁
- 如果用户被封禁, 暂停任务, 提示用户重新登陆
- fixed bug list
- 输出图片的时候, 本应该替换src属性, 但是替换成了data-default-watermark-src属性
- 致谢列表溢出了背景颜色区域
- 二期规划
- 项目目标
- 制作电子书, 方便自己阅读
- 而不是制作电子书, 以对外发布
- 不需要商业化
- 因此不需要复杂的排版功能
- 关键在于, 是否方便
- 需要
- 收集功能
- 简单自定义内容
- 制作电子书, 方便自己阅读
- 电子书制作模式
- 基础模式
- 选择数据源
- 问题/答案/收藏夹/话题/想法/专栏/文章/用户回答/用户提问过的问题/用户关注过的问题/用户赞同过的回答&文章/用户想法
- 确认输出模式
- 排序模式
- 正序/倒序
- 问题与文章
- 赞同数
- 评论数
- 答案/文章创建时间
- 答案/文章最后更新时间
- 收藏时间-可选
- 想法
- 发布时间
- 赞同数
- 评论数
- 转发数
- 用户故事
- 支持按照赞同时间顺序
- 正序/倒序
- 支持按照赞同时间顺序
- 用户关注过的问题
- 支持按照关注时间顺序
- 正序/倒序
- 支持按照关注时间顺序
- 问题列表/混排模式
- 支持按照原始设定顺序
- 答案视为一个问题
- 文章也视为一个问题
- 按以下进行排序
- 总答案赞同数
- 问题关注人数
- 问题浏览数
- 问题创建时间
- 问题最后编辑时间
- 单纯收藏夹
- 支持按收藏时间排序
- 过滤条件
- 正序/倒序
- 问题与文章
- 赞同数
- 评论数
- 答案/文章创建时间
- 答案/文章最后更新时间
- 想法
- 发布时间
- 赞同数
- 评论数
- 转发数
- 问题与文章
- 前n条/前百分之n
- 至少m条
- 至多y条
- 正序/倒序
- 图片配置
- 原图
- 默认
- 无图
- 自定义逻辑
- 按最小宽高(或/且)
- 宽大于指定值 => 使用原图
- 高大于指定值 => 使用原图
- 按最小宽高(或/且)
- 排序模式
- 输出单位
- 如果是简单类型(话题/专栏/用户回答/用户问题/用户想法/收藏夹/单个问题), 单独输出一本电子书, 允许自定义书名
- 如果是复杂类型(两种及以上类型混合), 按问题/文章/想法三大类聚合输出, 不支持分章节
- 存储单位
- 基本单位
- 回答
- 文章
- 想法
- id统一使用varchar(100)
- 使用基本接口进行查询
- 其余数据使用这两者进行构建, 例如, 关注问题列表的记录为
- 关注问题列表
- 问题下回答列表
- 关注问题列表
- 基本单位
- 选择数据源
- 基础模式
- 支持自定义
- 电子书
- 书名
- 封面图片
- 作者
- 相关可配置属性
- 电子书集合
- 统一叫自定义电子书
- 回答
- 问题
- 专栏
- 文章
- 想法
- 电子书
- 支持抓取
- 想法
- 回答
- 问题
- 用户关注过的问题下的回答
- 组织模式
- 按问题组织
- 对外的最小粒度应该是问题/文章/想法
- 想法单条展示
- 想法下
- 图片 => 直接展示
- 文章/回答 => 抓取内容进行渲染
- 问题 => 抓取答案进行渲染, 默认只渲染按赞同数排名的前20条
- 想法下
- 项目目标
- 变量命名规范
- 类型统一使用namespace方式声明, 导入时使用
Type + xxx
形式进行导入 - Model导入时统一使用
M + xxx
形式进行导入 - View导入时统一使用
View + xxx
形式进行导入 - Util工具函数导入时统一使用
xxx + Util
形式进行导入 - async函数前统一添加
async
前缀, 以和正常函数进行区分
- 类型统一使用namespace方式声明, 导入时使用
- 文件命名规范
- 统一使用下划线方式命名
- 建议只开发命令版
- 使用
npm run ace
启动
- 使用
- GUI版需要为Electron编译sqlite3, 非常麻烦, 不建议尝试
- 编译指南: https://www.cnblogs.com/DonaHero/p/9809325.html
- 流程
- Windows用户
- 安装VS 2015社区版, 是的你没看错
- 文件-新建项目-Visual C++ -> 选择 安装vs2015所需的C++开发环境
- 好了一个小时过去了
- 执行
npm run rebuild-electron-with-sqlite3
, 编译完成sqlite3之后, 就可以启动GUI界面了
- Mac用户
- 我没有mac谢谢
- Windows用户
- 注意:
- 打包时会向dist目录中复制一份node_modules目录, 导致npm run 时优先从dist中获取node_module信息, 导致无法启动
- 因此, 打包结束后需要将dist里的node_modules目录删掉, 以免影响后续开发工作
- 打包时会向dist目录中复制一份node_modules目录, 导致npm run 时优先从dist中获取node_module信息, 导致无法启动
- 电子书封面分辨率为: 100 * 130(宽*高)
- commit信息规范 =>
关键字 功能 feat 添加新功能 format 调整代码格式 fix 修复错误 doc 修订文档/注释
- TypeScript提供类型支持, 在编写代码时可以自动提示变量下的属性
- Electron提供图形界面, 利用webview标签直接登陆知乎
- 利用知乎接口抓取数据
- ace/command提供命令行支持
- sqlite3提供数据库支持
- 将电子书制作分为以下三步
- 初始化环境 => 对应于
npm run ace Init:Env
命令 - 抓取指定内容 => 对应于
npm run ace Fetch:XXX
系列命令, 目前支持Column
/Author
/Activity
/Collection
/Topic
- 从数据库中获得数据, 生成指定内容电子书 => 对应于
npm run ace Generate:XXX
系列命令, 目前支持Column
/Author
/Activity
/Collection
/Topic
- 因此, 实际任务流程就是根据用户输入url, 生成对应命令配置, 不断执行命令即可
- 初始化环境 => 对应于
- 项目开发流程
npm run watch
启动监控, 将ts
自动编译为js
文件npm run startgui
, 启动前端界面(vue项目, 基于Element-UI简单构建)- 修改
src/index.ts
, 将代码由替换为// 线上地址 mainWindow.loadFile('./gui/dist/index.html') // 本地调试 & 打开控制台 // mainWindow.loadURL('http://127.0.0.1:8080') // mainWindow.webContents.openDevTools()
使用本地页面进行调试// 线上地址 // mainWindow.loadFile('./gui/dist/index.html') // 本地调试 & 打开控制台 mainWindow.loadURL('http://127.0.0.1:8080') mainWindow.webContents.openDevTools()
- 执行
npm run start
, 启动Electron- 前端点击
开始任务
按钮后, 将任务配置写入task_config_list.json
, 再由Electron收集登陆后产生的知乎cookie, 存入config.json
文件中, 随后启动Dispatch:Command
命令, 开始执行任务
- 前端点击
- 注意事项
- Electron需要编译sqlite3后才能启动, 不容易搞, 建议直接使用
npm run ace
命令行方式进行调试 - 命令使用说明详见代码
- Electron需要编译sqlite3后才能启动, 不容易搞, 建议直接使用
欢迎通过issue提建议