概览¶
该项目实现了基于 Scrapy & KindleGen 的 mobi
打包功能,用于将文章列表打包,
供 MoEar 推送使用。
对于 MoEar 来说,并不强求打包插件使用何种技术实现,只要符合 moear-api-common 中定义的相关接口即可。
当前主流的另一种实现为以 KindleEar 为主的,基于 Calibre 移植的打包工具包。
本工具实现时也有考虑使用 Calibre ,但由于其不支持 Python 3.X
,
且其实现为直接生成 mobi
文件,故涉及到很多的文件字节操作,在没有任何相关文档可参考的情况下,
实在是晦涩难懂,将其移植到 Python 3.X
下运行难度太高,故转而使用官方提供的转换工具。
庆幸的是,官方转换工具的使用,使得整个实现优雅简洁的多。
项目结构¶
包路径说明如下:
.
├── __init__.py
├── crawler_script.py # 用于提供可程序调用Scrapy的爬行类
├── entry.py # 实现接口定义的入口文件
├── items.py # Scrapy 的数据模型
├── middlewares.py # Scrapy 的中间件
├── pipelines.py # Scrapy 的流水线
├── settings.py # Scrapy 的参数设置
├── spiders # Scrapy 的具体爬虫实现路径
│ ├── __init__.py
│ └── mobi.py # mobi打包的爬虫主体
└── template # 模板路径,用来存储用于生成mobi源文件的Jinja模板
├── OEBPS
│ ├── content.opf # 内容清单模板
│ ├── toc.html # html格式的目录模板
│ └── toc.ncx # ncx格式的目录模板
└── post.html # 文章内容模板
业务流程¶
书籍生成¶
主要功能为根据传入的文章列表数据,将其中的图片链接下载到本地,最终打包到 mobi 中。 并将文章内容中相应的图片链接替换为本地相对路径后,通过文章内容模板渲染后保存到本地。 最终,根据模板生成相关清单、目录等文件,拷贝封面、报头等图片后,进行整体 mobi 打包。
此处我是用 Scrapy 主要目的即为,对图片的异步下载,以及缩略图生成等操作。
您完全可以使用其他框架或手写 Request
来实现图片下载工作。
提示
该方法会在 Celery 的单独进程中被调用
注解
传入的文章列表数据,可参考 moear-api-common 中, SpiderBase.format
的实现。
具体用例可参考 moear-spider-zhihudaily 中相关章节的用例说明,里面有很详尽的描述