Skip to content

Latest commit

 

History

History
111 lines (94 loc) · 3.93 KB

知乎助手实现思路.md

File metadata and controls

111 lines (94 loc) · 3.93 KB

知乎助手编写说明

目录

  1. 概览
    1. 总体架构
    2. 项目组成
  2. 模块简介
    1. tools
      1. Config
      2. Debug
      3. Path
      4. Http
      5. Match
      6. Type
      7. DB
      8. Controler
      9. HtmlCreator
    2. worker
    3. parser
    4. epub

概览

架构思路

知乎助手的核心其实就是:抓取数据&生成网页。架构其实就是尽可能地解耦这两大工作单元,将整个工作流程拆分成独立的模块,在1.7.3版中,我所理解的助手工作流程如下:

  1. 初始化环境(建立数据库,载入设置项等)
  2. 分析ReadList
  3. 根据ReadList内容,生成待下载的网址列表,以及抽取数据的SQL语句(此处实现网页下载与数据抽取的分离)
  4. 根据下载网址列表,下载网址并进行分析,将分析结果存入数据库内
  5. 第3步完成后,根据SQL语句,从数据库中抽取相应数据,并进行处理,使之可以生成html网页
  6. 将抽取出的数据填充至预先编写好的html模板中
  7. 在磁盘上写入html网页,下载图片并压缩成epub电子书

大致如此。

项目组成

根据架构思路中的工作流程,可以很自然的将项目分成如下几个模块

  1. 环境模块
    • 该模块负责初始化助手的运行环境,包括如下几个部分
    • guide.py
      • 负责提供交互界面中用到的提示语句,引导用户进行设置
    • login.py
      • 负责进行登陆操作,以获取cookie,方便后期的抓取
    • main.py
      • 主程序,负责控制整个助手的流程(类似于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
        • 负责提供杂项工具
  2. 容器模块
    • 用于容纳各种数据
    • container
      • book
      • image
      • page
      • task
  3. ReadList分析模块
    • 用于将ReadList的内容分析成task数据,以便worker进行下载以及RawBooks生成电子书
    • read_list_parser.py
  4. 下载模块
    • 主要负责根据task内容生成待抓取网页列表并下载网页,下载下来之后将内容交由Parser进行分析并存入数据库中
    • work.py
  5. 数据分析模块
    • 用于对网页数据进行分析
    • lib/parser
  6. 内容处理
    • 用于根据task的设定从数据库中取出相应数据,进行相应处理后交由Epub模块生成电子书
    • RawBook
  7. 电子书生成
    • 用于将html网页压制成epub电子书
    • lib/epub

知乎助手代码约定

  • tools模块内为通用类库
    • Debug
      • 负责打印日志
    • Path
      • 负责进行常见文件系统操作
      • 保存常用路径地址
        • 路径地址最后一律没有'/'