在知乎「发现(大 V 们)更大的世界」的过程中,我发现了一个开源项目ZhihuHelp,刚好初学 Python ,于是跟着慢慢地学习,写了一些简单爬虫,写正则表达式,学 BS 库,学 EPub 格式电子书的组织结构,后来开始给知乎助手这个项目提 Issues , pull requests ,再到后来,根据自己的需要写了简书的版本,能够把某个博主的所有博文做成电子书,如,把王垠的所有博客做成 EPub 格式的电子书:
地址是:jianshu2e-book
再后来,我又写了新浪博客的版本,如,把韩寒的博客做成 EPub 格式的电子书:
地址是:SinaBlog2e-book
我是 Kindle 重度用户,这几个程序的功能对我很有帮助,用着用着,有一天我突然想到,其实这样的需求还真不少,我应该把这个程序变成一个框架,把需要爬取的网站作为一个个模块放在里面,于是便有了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 ,哪怕写要爬取的网站需求都行~
1
yaozeyuan93 2016-03-19 20:44:21 +08:00 1
来顶一个←_←
|
2
wizardforcel 2016-03-19 20:49:00 +08:00
|
3
knarfeh OP @yaozeyuan93 知乎助手的作者~~~谢谢~
|
4
knarfeh OP @wizardforcel 啊哈哈哈,以后学 node 的时候跟着学习一下, node 是将来一定会学的!
|
5
mliilm 2016-03-19 21:09:51 +08:00
能不能爬微信公共号的历史文章?
|
7
marenight 2016-03-19 22:33:07 +08:00
想问下将 rss 制作博客电子书有什么比较好的工具。
|
8
IwfWcf 2016-03-19 23:58:44 +08:00
赞,很有意思的工具
|
9
addbook 2016-03-20 00:11:04 +08:00
不错
|
10
Abirdcfly 2016-03-20 01:29:14 +08:00 via iPhone
赞。。。 calibre 的优势在早罒ω罒,国外开源的在线电子书很多都有对应的 py 文件。。但是它不是用来处理这种类似知乎某个用户的回答这种页面不完全一样的页面(此处存疑。我看过的源文件不多。。)。
好想贡献源码。。可惜最近事多。。哭。。。 |
11
regent 2016-03-20 04:34:33 +08:00 via iPhone
支持,其实就是大家贡献规则,然后不断更新,最后达到即开即用的效果。
个人希望能探索将微信公众号文章打包的功能,不用太多,近期的就够用。微信公众号要是能转 rss 就好了。 话说楼主考虑过用 rss 做源么?用户定制 list ,然后自动抓取一圈打包。当然,问题是不同网站的内容如何在设备上呈现美观易读 |
12
knarfeh OP @marenight 你可以试试 calibre 。 calibre 的 recipe 功能最方便的可能就是 rss 订阅了,只需要导入一个 OPML 文件,我尝试了一下,不在乎页面样式的话,抓取最新的文章还是可以的,貌似没有办法抓取全部文章,而且如果有的博客 rss 输出只输出摘要,不输出全文,这个就没有什么意义了
|
14
knarfeh OP @Abirdcfly 对对对,我就是在怀疑这一点,不确定 calibre 能不能搞定这种情况,希望写过复杂 recipe 的大牛来打我脸。。。贡献代码不着急啊,没事没事,慢慢来:)
|
15
simoncos 2016-03-20 08:26:36 +08:00 via iPad
很有趣啊,顶
|
16
steveway 2016-03-20 08:30:43 +08:00
赞一个 能直生成 mobi 就更好了,省去再转一次的麻烦。
|
17
dobest 2016-03-20 08:31:46 +08:00 via Android
作为 kindle 用户,这个要支持一下。有机会还是想参与进来的。
|
18
knarfeh OP @regent 考虑过 rss 做源,但是这种方式貌似有限制,因为 rss 的核心是推送网站最新更新,如果一个 OPML 文件下有多种 feed ,就很难保证输出的电子书有很好的质量,因为对应的是多个网站的内容。用 rss 的话感觉像是做杂志了,不过也未尝不可
|
19
knarfeh OP @steveway 因为 EPub 这种标准比较开放嘛,而 mobi 是亚马逊推动的(噢万恶的亚马逊想搞电子书行业的垄断),可能的话,以后加上生成 mobi 的功能
|
21
dphdjy 2016-03-20 08:58:15 +08:00 via Android
(๑ºั╰╯ºั๑)加上贴吧源和 discuz 源,这是极好的~(有空再来
|
23
wizardforcel 2016-03-20 10:37:30 +08:00
我最近在想这种东西能不能做成可配置的,就比如指定 url 和几个选择器(链接、标题、正文)就可以抓取满足要求的东西。
|
24
knarfeh OP @wizardforcel 会朝这个方向努力,但我更倾向于保留自由度,要写成完全通用的框架基本不可能,因为网页的类型多种多样,比如知乎问答,百度贴吧这种就不是简单的标题+正文
|
25
qa52666 2016-03-20 16:14:41 +08:00
支持一个
|
26
mycccc 2016-03-21 10:01:35 +08:00
可以考虑爬取搜狗的微信公众号内容
|
28
Is0 2016-03-23 13:12:31 +08:00
我用 calibre 抓松鼠会的 rss 只有最近的,能问下怎么能全部爬下来? 求帮忙看看 http://songshuhui.net/archives/tag/%E5%8E%9F%E5%88%9B 想全爬下来慢慢看
|
31
moufuli 2016-08-09 09:20:05 +08:00
不要通过邮件发送已生成的 epub 文件,因为附件是有大小限制的(我在网页的制作的全挂。。。)
另外客户端在哪里下载?使用教程? |
32
knarfeh OP @moufuli https://github.com/knarfeh/EE-Book 目前你可以用命令行生成。最近比较忙,有段时间没有看了,这个周末我会更新一下
|
33
moufuli 2016-08-16 11:28:14 +08:00
心好累。。。新手从 0 开始折腾 python , 2.5 个小时过去了,依旧没有生成 epub 。。。代码显示如下:“……所有内容抓取完毕,开始对页面进行解析…… 网页内容解析完毕…… TypeError: sequence item 0: expected string, NoneType found ……” 能解答下吗?
|
34
knarfeh OP @moufuli 啊哈,有用最新代码吗?你给的信息不是很全,如果有需要就私信我吧,我的邮箱是 knarfeh(at)outlook.com
|