如何自动生成一本epub电子书
电子书现在已经非常容易获得了,制作电子书的成本也越来越低,本文分享一些制作epub电子书的方法,希望对你有帮助。
一本电子书的主要结构有:
- 书籍基本元信息:书名/作者/简介/封面图片/出版商/出版时间等等信息。
- 目录信息: 可以快速定位各个章节位置,方便搜索阅读位置。
- 章节的正文内容: 保存这本书中的详细阅读内容。
以上是我们的电子书主要结构,当然还有一些附加信息也是可以根据软件不同去附加上去的,但作为一本电子书,上面的结构就足够了。
很久以前写过一个爬虫项目,是专门用于自动生成epub电子书的工具,主要的功能:
- Python3语言实现,支持自定义规则实现爬取目标网页。
- 内置了gitbook/wordpress博客和javascript教程网站的编写示例,可以参考学习。
当初实现过程比较简单,只是拿来做爬虫练习写的,任何人都可以借鉴实现属于自己的更好的功能。
今天来说下实现这个功能的过程。
epub制作项目
- ebook_spider项目:一个通用的爬虫制作电子书项目。
这个项目将制作电子书的基本信息都封装在单个方法中,只需要实现对应方法就可以自动生成电子书了。
1.EbookLib库
这是一个Python库,作用是用来制作epub格式电子书。
- 项目地址,虽然Star不多,但是用起来还是很好用的。
- 文档地址,开发过程中需要阅读文档介绍。
本项目的epub文件制作就是使用了ebooklib库完成的,只不过为了简化而封装了一个电子书的基类Ebook
2.Ebook爬虫基类
这个Ebook
就是一个爬虫基类,可以根据规则匹配网页链接的内容生成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电子书相关推荐
- python3自动爬取网页资源并保存为epub电子书
使用Python获取网页内容并生成EPUB格式电子书 前言 EPUB的介绍 思路 代码示例 前言 现在的有很多电子书都不能下载了,只能在线看,但是广告又多.所以想编个程序抓取这些内容生成电子书. EP ...
- 开发EPUB电子书制作下载网站
角摩网制作EPUB电子书下载地址:http://www.joymo.cn/Html/Diy/wjzz.html,居于epub格式标准,采用C#开发独立的生成程序! EPUB 是一种开放式的数字图书规范 ...
- Savior:渗透测试报告自动生成工具
系统框架 前端:Ant Design Pro 后端:Django REST Framework 数据库:Mysql 主要功能 用户管理:主要是方便统计漏洞的发现者,后续可能大概也许会添加漏洞统计模块, ...
- webstorm如何自动换行_怎样在word中自动生成目录
欢迎关注支持,谢谢!!! 用 Word 编排好一本书后,不用制作目录,可以用自动生成的方法生成,那么Word2016目录怎么自动生成呢?如果要自动生成目录,排版时就要设置好章节,如果等排 ...
- .NET6使用DOCFX根据注释自动生成开发文档
本文内容来自我写的开源电子书<WoW C#>,现在正在编写中,可以去WOW-Csharp/学习路径总结.md at master · sogeisetsu/WOW-Csharp (gith ...
- 使用Google学术自动生成标准的参考文献格式(Word版+LaTex版)
记住是Google学术哦~ 超赞!不过现在百度学术.微软学术.搜狗学术.360学术等网站也都加了这个功能~ 在谷歌学术搜索中输入你想要放在[参考文献]中的书名或文章名,搜索结果中找到对应的条目(通常就 ...
- 用电脑“自动生成”的图书
<优秀网页设计速查与赏析>是一本用电脑"自动生成"的图书. 怎么,你不相信吗?我现在就来讲讲这本书的编写过程. 收集优秀网页设计 之所以有编写这本书的想法,主要是因为出 ...
- 用 Python 自动生成数据日报!
日报,是大部分打工人绕不过的难题. 对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态.可对于员工来说,那就有的聊了.对于重复性的工作,我非常推荐大家使用Python将其变成模块化.自 ...
- GitBook制作epub电子书,并上传到微信读书
目标:将一本 GitBook(SpringBoot2 中文参考指南)转换为 epub 电子书,放到微信读书里. 准备工作:Windows 10 X64,NodeJS及版本管理工具nvm.Chrome浏 ...
- epub电子书如何用MAC打开?
epub电子书如果在mac上遇到了不兼容的问题,其实选择一款专业的epub阅读器就能解决,今天为大家推荐几款epub阅读器,感兴趣可以试试看. Top1:Neat Reader 这款阅读器可以 ...
最新文章
- 云智易获上海CIO联盟“年度物联网云平台技术创新奖”
- C语言在一个有序数组里插入一个元素,使其成为一个新的有序数组
- python3 元组 tuple 操作
- 分布式缓存DistributedCache的使用
- C++递归求数组最大值、平均值、求和
- .hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总
- Flutter VS React Native –为什么我认为Flutter最适合移动应用程序开发
- Atitit.js的键盘按键事件捆绑and事件调度
- Spark中的python shell交互界面Ipython和jupyter notebook
- png图片怎么转换成jpg
- 利用Hexo GitHub Page和 travis CI搭建播客
- python分支结构、循环结构
- java石头剪刀布思路_石头剪刀布Java实现
- 多线程同步器之CountDownLatch
- 中科世为 Z6S Linux HMI 屏幕模组上手记录 | 01 - 环境搭建
- 随手记-记录一些技术点
- 彩条屋救不了光线传媒
- Flutter dio add/set报错
- 解决Spring 鸡(J)四(s)屁(p)文件夹下面有(J)(S)(P)文件但访问404的问题
- 带有风的诗词_带有风的诗句大全