使用Python获取网页内容并生成EPUB格式电子书

  • 前言
    • EPUB的介绍
    • 思路
    • 代码示例

前言

现在的有很多电子书都不能下载了,只能在线看,但是广告又多.所以想编个程序抓取这些内容生成电子书.

EPUB的介绍

关于EPUB的介绍已经有很多了.简单的说就是把书的各个章节和生成的一些记录目录信息放在一起后打成zip压缩包,然后再改名为epub结尾.虽然已经有个epublib的库,但是我还是想自己做一个程序,这样想随意增加功能.

思路

1.找一本epub文件,另存为zip文件后解压.
2.根据epub里面的文件结构创建文件夹,用到mkdir命令
3.打开epub里面的所有文件,看看里面写了什么.把需要更改的内容用字符串的format功能写入.
4.编写爬虫代码从网页上抓取内容后生成epub所需要的所有文件
5.重新用zipfile把文件进行压缩成epub.

代码示例

[目录创建代码]

// An highlighted block
def Savefolder_creation(Savefolder):if not os.path.exists(Savefolder):#判断目录是否存在os.makedirs(Savefolder)#如果不存在则创建目录global Temp_folderTemp_folder=Savefolder+r'\temp'global OEBPS_folderOEBPS_folder=Temp_folder+r'\OEBPS'if not os.path.exists(OEBPS_folder):os.makedirs(OEBPS_folder)#创建OEBPS目录global META_folderMETA_folder=Temp_folder+r'\META-INF'if not os.path.exists(META_folder):os.makedirs(META_folder)#创建META-INF目录
Savefolder_creation(Savefolder)

[章节内容代码chapter.html]*

// An highlighted block
#下面函数为把正文内容保存为一个chapter*.html的文件.
def contents_html(OEBPS_folder,chapter_title,book_contents,count):P_content='''
<p class="a">  {}</p>
'''temp_P_content=[]i=len(book_contents)for x in range(i):temp_P_content.append(P_content.format(book_contents[x]).rstrip('\n'))#把章节标题放入段落里面temp_P_content='\n'.join(temp_P_content)+'\n'#把列表转换为字符串,中间用换行符连接toc=open(OEBPS_folder+'\\chapter{}.html'.format(count),'w',encoding="utf-8")toc.write('''<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<meta name="generator" content="Nobody" />
<title>
No title
</title>
<link rel="stylesheet" href="style.css" type="text/css"/>
</head>
<body>
<h2 id="title" class="titlel2std">{标题}</h2>
{内容}
</body>
</html>'''.format(标题=chapter_title,内容=temp_P_content))#目录后面用format输入.toc.close())**[生成mimetype_creation代码]**
```javascript
// An highlighted block
def mimetype_creation(Temp_folder):mimetype=open(Temp_folder+r'\mimetype','w',encoding="utf-8")mimetype.write('application/epub+zip')mimetype.close()**[部份主程序代码,实现3个功能,可以把一页网页保存为epub电子书/把一本书保存了电子书/把一个版块的书本保存为电子书.]**
```javascript
// An highlighted block
level=input('保存当前正文为电子书请输入1,保存目录页面为电子书请输入2,保存多本书请输入3:')
if level=="1":print('正在爬的网站为:',url1)(chapter_title,book_contents)=book_contents_function(url1,headers,chapter_title_pattern,book_contents_pattern)#获取每一章节的内容count=0cover_creation(OEBPS_folder,chapter_title)toc_creation(OEBPS_folder,chapter_title,chapter_title)content_creation(OEBPS_folder,chapter_title,chapter_title)book_toc_cration(OEBPS_folder,chapter_title)contents_html(OEBPS_folder,chapter_title,book_contents,count)Epub_zip(chapter_title,Temp_folder)
if level=="2":epub_maker(url2,headers,title_pattern,chapter_pattern,name_pattern,OEBPS_folder,Temp_folder)
if level=="3":print('正在爬的网站为:',url3)allbook=book_link(url3,headers,book_pattern)#调用函数获取所有书的链接for i in range(len(allbook)):time.sleep(2)epub_maker(allbook[i],headers,title_pattern,chapter_pattern,name_pattern,OEBPS_folder,Temp_folder)## 总结
本来想写一个适配所有网页的程序的,后来发现网页的代码并不规范.所以这个程序需要有一定的正则表达式基础才可以驾驭.
下面为代码运行的效果.![代码运行的效果](https://img-blog.csdnimg.cn/20191225132448962.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b3FpbnhpYW5n,size_16,color_FFFFFF,t_70)

python3自动爬取网页资源并保存为epub电子书相关推荐

  1. Scrapy研究探索(六)——自动爬取网页之II(CrawlSpider)

    原创,转载注明: http://blog.csdn.net/u012150179/article/details/34913315 基于上面的博客修改而得 一 目的 在教程(二)中使用基于Spider ...

  2. Scrapy项目之自动爬取网页信息

    前文已经介绍了利用Scrapy框架与手写爬虫,比较了Scrapy框架的优势.前面介绍的scrapy框架爬取是针对一个网页的爬取,而本文介绍的是实现多个网页的自动爬取,本文将以爬取虎扑湿乎乎论坛帖子信息 ...

  3. python3实现抓取网页资源的 N 种方法(内附200GPython学习资料)

    这两天学习了python3实现抓取网页资源的方法,发现了很多种方法,所以,今天添加一点小笔记. 文章最后为各位小伙伴提供超级彩蛋!不要错过了! 1.最简单 import urllib.request ...

  4. Python 爬取网页信息并保存到本地爬虫爬取网页第一步【简单易懂,注释超级全,代码可以直接运行】

    Python 爬取网页信息并保存到本地[简单易懂,代码可以直接运行] 功能:给出一个关键词,根据关键词爬取程序,这是爬虫爬取网页的第一步 步骤: 1.确定url 2.确定请求头 3.发送请求 4.写入 ...

  5. node.js 爬虫 实现爬取网页图片并保存到本地

    node.js 爬虫 实现爬取网页图片并保存到本地 没有废话直接看代码 /*** 请求网站数据* 将数据保存本地文件*/ //不同协议引用不同模块,http https const http = re ...

  6. python爬取一张图片并保存_python爬取网页图片并保存到本地

    先把原理梳理一下:首先我们要爬取网页的代码,然后从中提取图片的地址,通过获取到的地址来下载数据,并保存在文件中,完成. 下面是具体步骤: 先确定目标,我挑选的是国服守望先锋的官网的英雄页面,我的目标是 ...

  7. python3 get爬取网页标题、链接和链接的数字ID

    1.使用requests库请求网站 网页请求方式:(1)get :最常见的方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式,响应速度快. (2)post:多以表单形式上传参数,因此除了查询 ...

  8. java爬取网页并保存_第九讲:Python爬取网页图片并保存到本地

    上一讲我们说了如何把网页的数据通过分析后存储到数据库,我们这次讲如何将网页上的图片提取并下载到本地. 思路如下: 我们本次要爬取的是昵图网首页的图片. 1.首先分析我们要爬取的网页的代码结构,每个网页 ...

  9. 第九讲:Python爬取网页图片并保存到本地

    上一讲我们说了如何把网页的数据通过分析后存储到数据库,我们这次讲如何将网页上的图片提取并下载到本地. 思路如下: 我们本次要爬取的是昵图网首页的图片. 1.首先分析我们要爬取的网页的代码结构,每个网页 ...

最新文章

  1. 诊断ORA-08103错误
  2. 找圈圈 (BFS简单运用)
  3. ST表 (模板) 洛谷3865
  4. python爬取景点信息_python 爬取马蜂窝景点翻页文字评论的实现
  5. lambda中使用filter过滤
  6. keil5用jlink不到芯片_洛达芯片检测
  7. map的详解及常见面试题
  8. 云网络十年:探路者阿里云的理想和坚持
  9. P2123-皇后游戏
  10. linux怎么获取目录名,linux下如何获取目录名?(四种方法)
  11. linux软件抗干扰,解决asterisk下使用misdn时被SELinux干扰导致权限不足的问题
  12. Flutter打包apk中的一些巨坑
  13. CCS5.5.0编译问题之” XDAIS_CG_ROOT ”
  14. python机器人编程——VREP数字孪生四轴机械臂联合仿真
  15. 英尺英寸和厘米的换算_英尺米换算(英尺英寸与厘米换算器)
  16. CSS背景图片代码示例
  17. 开启usb调试的手机如何去除屏幕锁密码
  18. 有一天,派大星走了。海绵宝宝说:我没哭,
  19. BIM(biologically inspired model)小结
  20. 10月10日~10月17 产品资讯

热门文章

  1. WPS的word文档页面右边有一段空白原因
  2. 读取gpio管脚电平需要设置什么模式_MT7688/MT7628-GPIO使用
  3. 人人网陈一舟:创业18年,我领悟的五点心得
  4. UltraISO制作大于4G文件的光盘映像可启动U盘
  5. WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)
  6. 云服务器ecs增加带宽,老鸟告诉你云服务器带宽多少合适?
  7. MySQL8.0 物理克隆接口_实战 MySQL 8.0.17 Clone Plugin(转)
  8. PTA R7-5 Jack cheng的烦恼3
  9. python常见面试题基础部分
  10. HBase初识之学生心得总结