电子书现在已经非常容易获得了,制作电子书的成本也越来越低,本文分享一些制作epub电子书的方法,希望对你有帮助。

一本电子书的主要结构有:

  • 书籍基本元信息:书名/作者/简介/封面图片/出版商/出版时间等等信息。
  • 目录信息: 可以快速定位各个章节位置,方便搜索阅读位置。
  • 章节的正文内容: 保存这本书中的详细阅读内容。

以上是我们的电子书主要结构,当然还有一些附加信息也是可以根据软件不同去附加上去的,但作为一本电子书,上面的结构就足够了。

很久以前写过一个爬虫项目,是专门用于自动生成epub电子书的工具,主要的功能:

  • Python3语言实现,支持自定义规则实现爬取目标网页。
  • 内置了gitbook/wordpress博客和javascript教程网站的编写示例,可以参考学习。

当初实现过程比较简单,只是拿来做爬虫练习写的,任何人都可以借鉴实现属于自己的更好的功能。

今天来说下实现这个功能的过程。

epub制作项目

  • ebook_spider项目:一个通用的爬虫制作电子书项目。

这个项目将制作电子书的基本信息都封装在单个方法中,只需要实现对应方法就可以自动生成电子书了。

1.EbookLib库

这是一个Python库,作用是用来制作epub格式电子书。

  • 项目地址,虽然Star不多,但是用起来还是很好用的。
  • 文档地址,开发过程中需要阅读文档介绍。

本项目的epub文件制作就是使用了ebooklib库完成的,只不过为了简化而封装了一个电子书的基类Ebook

2.Ebook爬虫基类

这个Ebook就是一个爬虫基类,可以根据规则匹配网页链接的内容生成epub文件。

大致的运行过程为:

#mermaid-svg-odFRCGr5NHzEZb5v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-odFRCGr5NHzEZb5v .error-icon{fill:#552222;}#mermaid-svg-odFRCGr5NHzEZb5v .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-odFRCGr5NHzEZb5v .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-odFRCGr5NHzEZb5v .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-odFRCGr5NHzEZb5v .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-odFRCGr5NHzEZb5v .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-odFRCGr5NHzEZb5v .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-odFRCGr5NHzEZb5v .marker{fill:#333333;stroke:#333333;}#mermaid-svg-odFRCGr5NHzEZb5v .marker.cross{stroke:#333333;}#mermaid-svg-odFRCGr5NHzEZb5v svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-odFRCGr5NHzEZb5v .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-odFRCGr5NHzEZb5v .cluster-label text{fill:#333;}#mermaid-svg-odFRCGr5NHzEZb5v .cluster-label span{color:#333;}#mermaid-svg-odFRCGr5NHzEZb5v .label text,#mermaid-svg-odFRCGr5NHzEZb5v span{fill:#333;color:#333;}#mermaid-svg-odFRCGr5NHzEZb5v .node rect,#mermaid-svg-odFRCGr5NHzEZb5v .node circle,#mermaid-svg-odFRCGr5NHzEZb5v .node ellipse,#mermaid-svg-odFRCGr5NHzEZb5v .node polygon,#mermaid-svg-odFRCGr5NHzEZb5v .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-odFRCGr5NHzEZb5v .node .label{text-align:center;}#mermaid-svg-odFRCGr5NHzEZb5v .node.clickable{cursor:pointer;}#mermaid-svg-odFRCGr5NHzEZb5v .arrowheadPath{fill:#333333;}#mermaid-svg-odFRCGr5NHzEZb5v .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-odFRCGr5NHzEZb5v .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-odFRCGr5NHzEZb5v .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-odFRCGr5NHzEZb5v .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-odFRCGr5NHzEZb5v .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-odFRCGr5NHzEZb5v .cluster text{fill:#333;}#mermaid-svg-odFRCGr5NHzEZb5v .cluster span{color:#333;}#mermaid-svg-odFRCGr5NHzEZb5v div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-odFRCGr5NHzEZb5v :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

HTTPS访问
True,有章节
False,无chapter列表
True,有section
False,无section
电子书内容网址
是否有chapter列表?
获取chapter列表
是否有section列表?
获取文本内容
异常退出
输出epub文件

继承Ebook基类后,可以根据自己需要实现Chapter列表Section列表的获取规则及正文获取规则,就可以自动将目标网址输出到epub电子书文件中,其中内置了img图片素材下载插件,非常方便将图片素材下载并打包到epub文件中。

Wordpress电子书制作

大多数个人博客是用wordpress搭建的,所以我们来看下如何将博客打包成epub电子书文件吧。

WordPressEbook类继承了Ebook,然后根据wordpress网站的布局规则,实现了章节、内容提取规则方法,之后的epub文件制作任务就交给ebooklib库去帮忙完成就可以了。 真的可以说是很简单了。你可以找一个wordpress博客试试看。

参考项目中的wp_ebook.py 文件:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#########################################################################
# Author: zioer
# mail: next4nextjob@gmail.com
# Created Time: 2020年01月02日 星期四 18时46分24秒
#########################################################################from bs4 import BeautifulSoup as bs
from multiprocessing.dummy import Pool as ThreadPool
import multiprocessing as mpfrom Base.EbookBase import Ebookdefault_headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) \AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 \Safari/537.36'
}class WordPressEbook(Ebook):# 电子书制作def __init__(self, params, outdir="./", proxy=""):if not isinstance(params, dict):raise TypeError("params type error! not dict type.")self.url = params['url']self.book_name = params['book_name']self.author = params['author']self.lang = params.get('lang', 'zh')self.identifier = params.get('id', 'id0001')self.page_num = params.get('page_num', 5)   # 新增参数,用于拼接页数请求`{url}/page/{page}`self.outdir = outdirself.proxy = proxyself.opts = {}self.plugin = Nonedef fetch_chapter_list(self, text):'''抓取章url列表params:text:  章列表的HTML页面returnlist  [url, ...]'''soup = bs(text, "lxml")# 提取章列表a_list = ['{}/page/{}'.format(self.url, a) for a in range(1, self.page_num+1)]return a_listdef fetch_section_list(self, text):'''抓取章/节(title,url)列表params:url:  访问页面URLreturnlist  [(has_chapter, intro, (title, url)), ...] , has_chapter:  是否分章节,True-是,默认False'''soup = bs(text, "lxml")# 提取小节列表a_list = soup.select(r'h2 > a')# 提取书/章节描述信息(用于生成简介)section_list = [(a.get_text(), a.get('href')) for a in a_list]return section_listdef fetch_content(self, text):"""内容提取params:url: 小节URL地址return:content: 提取内容, 默认返回整个Body体内容"""try:soup = bs(text, 'lxml')title = '<h1>' + soup.title.text + '</h1>\n'content = soup.find('div', 'entry-content')if content is None:content = soup.find('article')return title + content.prettify()except Exception as e:print(e)return Noneif __name__ == '__main__':start_urls = [{'url': 'https://www.learnhard.cn/','page_num': 3,'book_name': '悟空的修炼笔记','author': 'learnhard.cn','id': 'learnhard','lang': 'zh'},]ctx = mp.get_context('fork')p_list = []for params in start_urls[:]:ebook = WordPressEbook(params, outdir="./")p = ctx.Process(target=ebook.fetch_book)p.start()p_list.append(p)for p in p_list:p.join()

总结

这个项目是将网页爬虫与epub电子书制作两个需求融合在一起产生的,只要设置好章节、内容爬取规则就可以自动生成一部epub电子书,然后将epub格式转换为mobi或者azw3格式后存放到kindle阅读吧。

自己动手搞起来吧,既可以达到阅读博客文章的目的,又可以增长编程技能,你觉得这个项目怎么样?

喜欢这个项目就关注我吧,点关注不迷路,记得到github上也一键三连呀。

如何自动生成一本epub电子书相关推荐

  1. python3自动爬取网页资源并保存为epub电子书

    使用Python获取网页内容并生成EPUB格式电子书 前言 EPUB的介绍 思路 代码示例 前言 现在的有很多电子书都不能下载了,只能在线看,但是广告又多.所以想编个程序抓取这些内容生成电子书. EP ...

  2. 开发EPUB电子书制作下载网站

    角摩网制作EPUB电子书下载地址:http://www.joymo.cn/Html/Diy/wjzz.html,居于epub格式标准,采用C#开发独立的生成程序! EPUB 是一种开放式的数字图书规范 ...

  3. Savior:渗透测试报告自动生成工具

    系统框架 前端:Ant Design Pro 后端:Django REST Framework 数据库:Mysql 主要功能 用户管理:主要是方便统计漏洞的发现者,后续可能大概也许会添加漏洞统计模块, ...

  4. webstorm如何自动换行_怎样在word中自动生成目录

           欢迎关注支持,谢谢!!! 用 Word 编排好一本书后,不用制作目录,可以用自动生成的方法生成,那么Word2016目录怎么自动生成呢?如果要自动生成目录,排版时就要设置好章节,如果等排 ...

  5. .NET6使用DOCFX根据注释自动生成开发文档

    本文内容来自我写的开源电子书<WoW C#>,现在正在编写中,可以去WOW-Csharp/学习路径总结.md at master · sogeisetsu/WOW-Csharp (gith ...

  6. 使用Google学术自动生成标准的参考文献格式(Word版+LaTex版)

    记住是Google学术哦~ 超赞!不过现在百度学术.微软学术.搜狗学术.360学术等网站也都加了这个功能~ 在谷歌学术搜索中输入你想要放在[参考文献]中的书名或文章名,搜索结果中找到对应的条目(通常就 ...

  7. 用电脑“自动生成”的图书

    <优秀网页设计速查与赏析>是一本用电脑"自动生成"的图书. 怎么,你不相信吗?我现在就来讲讲这本书的编写过程. 收集优秀网页设计 之所以有编写这本书的想法,主要是因为出 ...

  8. 用 Python 自动生成数据日报!

    日报,是大部分打工人绕不过的难题. 对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态.可对于员工来说,那就有的聊了.对于重复性的工作,我非常推荐大家使用Python将其变成模块化.自 ...

  9. GitBook制作epub电子书,并上传到微信读书

    目标:将一本 GitBook(SpringBoot2 中文参考指南)转换为 epub 电子书,放到微信读书里. 准备工作:Windows 10 X64,NodeJS及版本管理工具nvm.Chrome浏 ...

  10. epub电子书如何用MAC打开?

    epub电子书如果在mac上遇到了不兼容的问题,其实选择一款专业的epub阅读器就能解决,今天为大家推荐几款epub阅读器,感兴趣可以试试看.     Top1:Neat Reader 这款阅读器可以 ...

最新文章

  1. 云智易获上海CIO联盟“年度物联网云平台技术创新奖”
  2. C语言在一个有序数组里插入一个元素,使其成为一个新的有序数组
  3. python3 元组 tuple 操作
  4. 分布式缓存DistributedCache的使用
  5. C++递归求数组最大值、平均值、求和
  6. .hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总
  7. Flutter VS React Native –为什么我认为Flutter最适合移动应用程序开发
  8. Atitit.js的键盘按键事件捆绑and事件调度
  9. Spark中的python shell交互界面Ipython和jupyter notebook
  10. png图片怎么转换成jpg
  11. 利用Hexo GitHub Page和 travis CI搭建播客
  12. python分支结构、循环结构
  13. java石头剪刀布思路_石头剪刀布Java实现
  14. 多线程同步器之CountDownLatch
  15. 中科世为 Z6S Linux HMI 屏幕模组上手记录 | 01 - 环境搭建
  16. 随手记-记录一些技术点
  17. 彩条屋救不了光线传媒
  18. Flutter dio add/set报错
  19. 解决Spring 鸡(J)四(s)屁(p)文件夹下面有(J)(S)(P)文件但访问404的问题
  20. 带有风的诗词_带有风的诗句大全

热门文章

  1. 什么是Promise
  2. 有开始边DOTA边博客了
  3. 深信服负载均衡开发实习面经
  4. SEO人员必备技术有哪些
  5. 十大超级老牌黑客逐个曝光
  6. 为什么要架设移动基站
  7. http://www.csee.wvu.edu/~xinl/source.html 突然发现无法登陆,现备份内容以便后续查询
  8. C++——打印乘法口诀表
  9. 我想问问4月7号什么日子
  10. 直通车执行营销方式方法