EE-Book 简介

2016-03-19 20:36:05 +08:00
 knarfeh

缘起


在知乎「发现(大 V 们)更大的世界」的过程中,我发现了一个开源项目ZhihuHelp,刚好初学 Python ,于是跟着慢慢地学习,写了一些简单爬虫,写正则表达式,学 BS 库,学 EPub 格式电子书的组织结构,后来开始给知乎助手这个项目提 Issues , pull requests ,再到后来,根据自己的需要写了简书的版本,能够把某个博主的所有博文做成电子书,如,把王垠的所有博客做成 EPub 格式的电子书:

地址是:jianshu2e-book

再后来,我又写了新浪博客的版本,如,把韩寒的博客做成 EPub 格式的电子书:

地址是:SinaBlog2e-book

我是 Kindle 重度用户,这几个程序的功能对我很有帮助,用着用着,有一天我突然想到,其实这样的需求还真不少,我应该把这个程序变成一个框架,把需要爬取的网站作为一个个模块放在里面,于是便有了EE-Book

所以, EE-Book 是什么?

简单来说, EE-Book 能够让你把某网站的特定内容爬取下来做成 EPub 格式的电子书。

它是桌面程序,用 Python+PyQt 开发,在各种主流平台都可以使用。这个程序将是模块化,社区化的,任何人只要有需求,都可以提 Issues ,或者 pull requests ,然后这个模块将会添加到程序中,这样大家都能用了。当然这里的「提 Issues ,或者 pull requests 」是广义的概念,它可以是 github 项目主页的页面,也可以是独立的论坛,这个程序正在开发中,暂时没有 Web 的版本,以后开发对应的网站也未尝不可。

小 A 是一个播客重度用户,刚开始学 Python ,有一天他开始听talk python to me,在 iTunes 下载之后,他发现这个节目的网站上几乎所有的episodes都有对应的文稿,「真不错,可以学 Python ,可以练听力,还可以学英语」,但问题来了,小 A 用电脑的时候根本没空听 Podcast ,而这个播客的主页又没有做移动端的适配,拿手机完全没办法看,于是他提了一个 Issue ,程序员小 B 看见了这个 Issue ,嘿,刚好我也在听这个,就写这个模块方便大家吧,于是 EE-Book 就有了这一模块,小 A 制作了电子书,终于可以拿着手机, kindle 阅读了。

这样的场景当然还有很多。网络上的资源参差不齐,我们不缺阅读资源,我们缺的是深度阅读, EE-Book 就可以给我们一个选择,在网络不便的时候,在需要断绝干扰深度思考的时候,我们可以利用 EE-Book 的功能进行深度阅读。

这个是我的最初想法,说来惭愧,不久前才了解到 calibre 这个图书管理软件,当时后台部分写得差不多了,我模仿 calibre 的 Fetch News 界面写了一个简单的 GUI ,但当时并没有深入了解 recipe 的功能,最近才发现 calibre 的 recipe 非常强大,一些想法在 calibre 的 recipe 功能中已经有了实现,但不管怎么样,这个轮子我打算继续造下去,一方面是为了学习 Python+PyQt ,另一方面,我可以做 calibre 做不到的事情, calibre 开发了近 10 年,代码量很大,很重,而 recipe 需要按照一定的规范编写,有一定的局限性, EE-Book 会将重点放在 EPub 格式电子书的制作上,自由度很高,可以高度定制样式,不管是什么反爬虫的措施,都可以进行各种方式的 hack ,保证书籍的质量。 recipe 能否做到,我刚接触,不确定,但我确信既然 recipe 是基于 calibre 这个框架的,一定有它的局限性,并没有对 recipe 的每一个功能都很了解,这也是我发这个帖子的原因,我想要分享这个项目,希望各位能给出一些意见,或者谈谈 calibre 的缺点是什么,任何建设性的意见或建议我都会虚心接受,更希望有人参与进来,到项目主页提 issue 也好,说说需求,搞不好哪天 EE-Book 就可以制作你想要的电子书了。而且目前刚开始写 PyQt ,也遇到了一点困难,希望老手能够指点一二。

其实 calibre 的 recipe 应当火起来才对的,但很多人甚至都没有听说过,我觉得这个是有原因的,一个普通的没有写过代码的读者,听说了 calibre 的这个功能,他看到 recipe 的实现方式,心想要自己写代码,可能就望而却步了。事物的发展总是从简单到复杂再到简单, EE-Book 要做的事情就是从复杂到简单,代码的部分留给社区来做,利用这个框架,可以很快地添加模块,而普通的用户提 issue(甚至奖赏),就可以完成自己想要的电子书的制作。 recipe 针对的是某个网址,需要根据某个页面写代码,而 EE-Book 针对的是整个网站,比如制作知乎这种类型的电子书,只需要提供一个网址,如示例:

就可以制作相应的电子书,在命令行下,只需要把网址写入 ReadList.txt 文件中,运行即可获得 EPub 格式的文件,在 GUI 界面下,只需要把网址写到文本编辑框中,点下载即可。 最新版知乎助手生成的电子书是这样的(当然这些样式都可以自己写):

这里再次向知乎助手的作者表示感谢,我的程序基于这个框架,也请大家多多支持这个软件的发展,知乎助手的作者正在开发网页版,有时间,有兴趣的朋友也可以一起参与。

依葫芦画瓢,我写了新浪博客、简书的部分,精力有限,都还比较简陋。目前 EE-Book 有这三个模块:

目前代码耦合度还比较高,正在调整,开发中。刚开始学 PyQt ,写的 GUI 界面实在是很简陋,请多担待,也请大家多多提意见:)

说说想法,提 issue ,哪怕写要爬取的网站需求都行~

5027 次点击
所在节点    分享创造
34 条回复
dphdjy
2016-03-20 08:58:15 +08:00
(๑ºั╰╯ºั๑)加上贴吧源和 discuz 源,这是极好的~(有空再来
knarfeh
2016-03-20 09:02:09 +08:00
@dphdjy thanks,thanks!
wizardforcel
2016-03-20 10:37:30 +08:00
我最近在想这种东西能不能做成可配置的,就比如指定 url 和几个选择器(链接、标题、正文)就可以抓取满足要求的东西。
knarfeh
2016-03-20 10:47:32 +08:00
@wizardforcel 会朝这个方向努力,但我更倾向于保留自由度,要写成完全通用的框架基本不可能,因为网页的类型多种多样,比如知乎问答,百度贴吧这种就不是简单的标题+正文
qa52666
2016-03-20 16:14:41 +08:00
支持一个
mycccc
2016-03-21 10:01:35 +08:00
可以考虑爬取搜狗的微信公众号内容
knarfeh
2016-03-21 11:05:30 +08:00
@mycccc 谢谢,确实在考虑^_^"
Is0
2016-03-23 13:12:31 +08:00
我用 calibre 抓松鼠会的 rss 只有最近的,能问下怎么能全部爬下来? 求帮忙看看 http://songshuhui.net/archives/tag/%E5%8E%9F%E5%88%9B 想全爬下来慢慢看
knarfeh
2016-03-23 14:47:21 +08:00
@Is0 想全部爬下来,似乎要自己写代码~
Is0
2016-03-23 17:33:05 +08:00
@knarfeh 还是多谢啦 如果 calibre 爬 rss 有全爬下来的方法吗?
moufuli
2016-08-09 09:20:05 +08:00
不要通过邮件发送已生成的 epub 文件,因为附件是有大小限制的(我在网页的制作的全挂。。。)
另外客户端在哪里下载?使用教程?
knarfeh
2016-08-09 09:37:27 +08:00
@moufuli https://github.com/knarfeh/EE-Book 目前你可以用命令行生成。最近比较忙,有段时间没有看了,这个周末我会更新一下
moufuli
2016-08-16 11:28:14 +08:00
心好累。。。新手从 0 开始折腾 python , 2.5 个小时过去了,依旧没有生成 epub 。。。代码显示如下:“……所有内容抓取完毕,开始对页面进行解析…… 网页内容解析完毕…… TypeError: sequence item 0: expected string, NoneType found ……” 能解答下吗?
knarfeh
2016-08-16 12:14:33 +08:00
@moufuli 啊哈,有用最新代码吗?你给的信息不是很全,如果有需要就私信我吧,我的邮箱是 knarfeh(at)outlook.com

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/264790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX