抓取网页生成电子书(Windows,OSX及Linux操作系统或mobi格式的在线阅读 )

优采云 发布时间: 2021-12-03 19:54

  抓取网页生成电子书(Windows,OSX及Linux操作系统或mobi格式的在线阅读

)

  自从我买了kindle,我就一直在想如何最大限度地发挥它的功效。虽然可供购买的书籍很多,网上也有很多免费的电子书,但还是有很多网页形式的有趣内容。例如,O'Reilly Atlas 提供了很多电子书,但只提供免费在线阅读;此外,许多材料或文件只是网络形式。所以我希望能以某种方式将这些网上资料转成epub或mobi格式,以便在kindle上阅读。本文文章介绍了如何使用calibre并编写少量代码来实现这一目标。

  Calibre 简介

  Calibre 是一款免费的电子书管理工具,兼容 Windows、OS X 和 Linux。令人欣慰的是,除了GUI,calibre 还提供了很多命令行工具。ebook-convert 命令可以基于用户编写的食谱。该文件(实际上是python代码)抓取指定页面的内容,生成mobi等格式的电子书。爬取行为可以通过编写recipe来定制,以适应不同的网页结构。

  安装口径

  Calibre的下载地址是,您可以根据自己的操作系统下载相应的安装程序。

  如果是Linux操作系统,也可以通过软件仓库安装:

  Archlinux:

  pacman -S calibre

  Debian/Ubuntu:

  apt-get install calibre

  红帽/Fedora/CentOS:

  yum -y install calibre

  请注意,如果您使用 OSX,则需要单独安装命令行工具。

  抓取网页以生成电子书

  下面以Git Pocket Guide为例,说明如何通过calibre从网页中生成电子书。

  找到索引页

  要爬取整本书,首先要找到索引页。这个页面通常是目录,也就是目录页面,其中每个目录链接都连接到相应的内容页面。在生成电子书时,索引页会指导抓取哪些页面以及内容组织的顺序。在这个例子中,索引页是。

  写食谱

  Recipes 是一个带有配方扩展名的脚本。内容其实是一段python代码,定义了calibre爬取页面的范围和行为。以下是爬取 Git Pocket Guide 的秘籍:

  from calibre.web.feeds.recipes import BasicNewsRecipeclass Git_Pocket_Guide(BasicNewsRecipe): title = 'Git Pocket Guide' description = '' cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg' url_prefix = 'http://chimera.labs.oreilly.com/books/1230000000561/' no_stylesheets = True keep_only_tags = [{ 'class': 'chapter' }] def get_title(self, link): return link.contents[0].strip() def parse_index(self): soup = self.index_to_soup(self.url_prefix + 'index.html') div = soup.find('div', { 'class': 'toc' }) articles = [] for link in div.findAll('a'): if '#' in link['href']: continue if not 'ch' in link['href']: continue til = self.get_title(link) url = self.url_prefix + link['href'] a = { 'title': til, 'url': url } articles.append(a) ans = [('Git_Pocket_Guide', articles)] return ans

  代码的不同部分解释如下。

  整体结构

  一般来说,一个recipe是一个python类,但是这个类必须继承calibre.web.feeds.recipes.BasicNewsRecipe。

  解析索引

  整个recipe的核心方法是parse_index,这也是recipes必须实现的唯一方法。该方法的目标是通过分析索引页的内容,返回一个稍微复杂一些的数据结构(稍后介绍)。这个数据结构定义了整个电子书的内容和内容组织顺序。

  整体属性设置

  在类的开头,定义了一些全局属性:

  title = 'Git Pocket Guide'description = ''cover_url = 'http://akamaicovers.oreilly.com/images/0636920024972/lrg.jpg'url_prefix = 'http://chimera.labs.oreilly.com/books/1230000000561/'no_stylesheets = Truekeep_only_tags = [{ 'class': 'chapter' }]

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线