- 概览
- 总体架构
- 项目组成
- 模块简介
- tools
- Config
- Debug
- Path
- Http
- Match
- Type
- DB
- Controler
- HtmlCreator
- worker
- parser
- epub
- tools
知乎助手的核心其实就是:抓取数据&生成网页。架构其实就是尽可能地解耦这两大工作单元,将整个工作流程拆分成独立的模块,在1.7.3版中,我所理解的助手工作流程如下:
- 初始化环境(建立数据库,载入设置项等)
- 分析ReadList
- 根据ReadList内容,生成待下载的网址列表,以及抽取数据的SQL语句(此处实现网页下载与数据抽取的分离)
- 根据下载网址列表,下载网址并进行分析,将分析结果存入数据库内
- 第3步完成后,根据SQL语句,从数据库中抽取相应数据,并进行处理,使之可以生成html网页
- 将抽取出的数据填充至预先编写好的html模板中
- 在磁盘上写入html网页,下载图片并压缩成epub电子书
大致如此。
根据架构思路中的工作流程,可以很自然的将项目分成如下几个模块
- 环境模块
- 该模块负责初始化助手的运行环境,包括如下几个部分
- guide.py
- 负责提供交互界面中用到的提示语句,引导用户进行设置
- login.py
- 负责进行登陆操作,以获取cookie,方便后期的抓取
- main.py
- 主程序,负责控制整个助手的流程(类似于MVC结构中的Control)
- 由于历史原因该模块还顺手完成了检查更新,初始化数据库,载入设置项等杂项操作
- 主程序,负责控制整个助手的流程(类似于MVC结构中的Control)
- tools/
- config.py
- 负责保存全局设置(利用Python中导入模块时只导入一次的特性实现(或者说,利用共享的类变量实现))
- path.py
- 负责保存路径信息(原理同config.py),提供文件系统接口(例如copy,cd,rm操作等)
- db.py
- 负责提供数据库操作
- debug.py
- 负责提供打印日志,打印变量等debug操作
- match.py
- 负责进行文字匹配,以及文字整理(html除错)。
- controler.py
- 提供一个线程池,用于实现并行化下载
- template_config.py
- 模板配置项,主要用于记录html模板的位置
- html_creator.py
- 用于将从数据库中抽取出的数据填充成html
- type.py
- 用于记录类别名称
- http.py
- 用于进行网络操作
- extra_tools.py
- 负责提供杂项工具
- config.py
- 容器模块
- 用于容纳各种数据
- container
- book
- image
- page
- task
- ReadList分析模块
- 用于将ReadList的内容分析成task数据,以便worker进行下载以及RawBooks生成电子书
- read_list_parser.py
- 下载模块
- 主要负责根据task内容生成待抓取网页列表并下载网页,下载下来之后将内容交由Parser进行分析并存入数据库中
- work.py
- 数据分析模块
- 用于对网页数据进行分析
- lib/parser
- 内容处理
- 用于根据task的设定从数据库中取出相应数据,进行相应处理后交由Epub模块生成电子书
- RawBook
- 电子书生成
- 用于将html网页压制成epub电子书
- lib/epub
- tools模块内为通用类库
- Debug
- 负责打印日志
- Path
- 负责进行常见文件系统操作
- 保存常用路径地址
- 路径地址最后一律没有'/'
- Debug