用Python抓取漫画并制作mobi格式电子书
想看某一部漫画,但是用手机看感觉屏幕太小,用电脑看吧有太不方面。正好有一部Kindle,决定写一个爬虫把漫画爬取下来,然后制作成 mobi 格式的电子书放到kindle里面看。
一、编写爬虫程序
用Chrome浏览器打开目标网站,按下F12 启动“开发者人员工具”,分析目标网站的代码,看漫画存放的真实地址。现在网站的防护措施都做的很好,基本不会出现“右键”——“图片另存为” 然后保存漫画这种情况的。分析漫画页面 “下一章” 按钮对应的元素,通过使用 Python + selenium + Chrome浏览器 的组合,让爬虫自动化遍历该漫画所有章节并下载漫画:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import requests
import os def mkdir(path):
'''
防止目录存在
:param path:
:return:
'''
if not os.path.exists(path):
os.mkdir(path) def SavePic(filename,url):
'''
图片的保存
:param filename:
:param url:
:return:
'''
content = requests.get(url).content
with open(filename,'wb') as f:
f.write(content) def get_TOF(index_url):
url_list = []
chrome_options = Options()
chrome_options.add_argument('--headless')#启用Chrome浏览器“无头模式”,提高抓取速率
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get(index_url)
browser.implicitly_wait() title = browser.title.split(',')[]#获取漫画标题
mkdir(title)#创建目录 comics_lists = browser.find_elements_by_class_name('comic_Serial_list')#找到漫画章节
for part in comics_lists:#找到每一章节所在的标签信息
links = part.find_elements_by_tag_name('a')
for link in links:
url_list.append(link.get_attribute('href'))#获取每个单独章节链接
browser.quit()
Comics = {'name':title,'urls':url_list}
return Comics def get_pic(Comics):
comic_list = Comics['urls']
basedir = Comics['name']
chrome_options = Options()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options) for url in comic_list:
browser.get(url)
browser.implicitly_wait()
dirname = basedir+'/'+browser.title.split('-')[]
mkdir(dirname)
#找到漫画一共有多少页
pageNum = len(browser.find_elements_by_tag_name('option'))
#找到下一页按钮
nextpage = browser.find_element_by_xpath('//*[@id="AD_j1"]/div/a[4]')
for i in range(pageNum):
pic_url = browser.find_element_by_id('curPic').get_attribute('src')
filename = dirname+'/'+str(i)+'.png'
SavePic(filename,pic_url)
nextpage.click()
print('当前章节\t{} 下载完毕'.format(browser.title))
browser.quit()
print('所有章节下载完毕!') if __name__ == '__main__':
url = str(input('请输入漫画首页地址:\n'))
Comics = get_TOF(url) #print(Comics)
get_pic(Comics)
二、整理文件夹顺序
漫画下载完之后,按照章节顺序将漫画的文件夹排列好。确保 “按文件夹名称排列” 得到的顺序和漫画章节顺序相同。(这里可以用Python写一个重命名脚本或者用文件夹批量命名软件来完成),方便电子书的制作。
三、制作电子书
这里使用软件Kindle Comic Converter(具体用法可见 https://bookfere.com/post/164.html )来制作。需要注意的是,Kindle Comic Converter 生成 MOBI 文件依赖 KindleGen,如果没有找到的话,在安装完成以及运行时都会有提示。请点击这里 ( https://bookfere.com/tools#KindleGen )下载 KindleGen 并放到相应位置:Windows 系统把 kindlegen.exe 放到 KCC 安装目录中;Mac OS X 下需要把 kindlegen 程序放置到路径“/usr/local/bin”下。再继续进行转换步骤。
另外,网上说的制作过程是
- 把所有图片集中在一个文件夹内;
- 点击【Add directory】把文件夹添加到列表[注1];
- 选择 Kindle 设备型号、输出格式(可选 MOBI、EPUB 和 CBZ);
- 根据需要添加参数,如“Horizontal mobi(横屏模式)”等;
- 点击【Convert】开始转换。生成的电子书文件和所添加文件夹在同一目录。
【后记】
经我测试,最方便的做法是不把所有图片集中在一个文件夹。而是在 “三、制作电子书” 的步骤1 中,按照以下方式进行处理:建立一个《'漫画名字'》文件夹,然后这个文件夹下是类似“第1章” “第2章”……等文件夹。然后每个章节文件夹里面放入按顺序存放的漫画图片。(具体排序要求参见本文的 “二、整理文件夹顺序” )。然后点击【Add directory】把《'漫画名字'》文件夹添加到列表,再进行转换,这样转换出来的电子书就带有目录和书签效果了!
请注意版权!仅供自己的编程学习与测试,不要将制作好的mobi电子书进行传播,更不要牟利!尊重原作和内容提供商!
用Python抓取漫画并制作mobi格式电子书的更多相关文章
- 使用Python抓取猫眼近10万条评论并分析
<一出好戏>讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何? 黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演 ...
- Python抓取视频内容
Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...
- Python 抓取网页并提取信息(程序详解)
最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...
- 使用 Python 抓取欧洲足球联赛数据
Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤 数据的采集和获取 数据的清洗,抽取,变形和装载 数据的分析,探索和预测 ...
- python抓取性感尤物美女图
由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...
- python抓取网页例子
python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>
Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...
- 如何用python抓取js生成的数据 - SegmentFault
如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...
- 关于python抓取google搜索结果的若干问题
关于python抓取google搜索结果的若干问题 前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...
随机推荐
- N皇后问题(C++实现和函数式编程实现)
题意 在 N * N 的方格棋盘放置了 N 个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.求出有多少种合法的放置方法. C++实现(位运算 ...
- bzoj 4338: BJOI2015 糖果
4338: BJOI2015 糖果 Time Limit: 2 Sec Memory Limit: 256 MBSubmit: 200 Solved: 93[Submit][Status][Dis ...
- 六. 异常处理5.多重catch语句的使用
某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...
- DQL数据查询语言——连接查询
--内连接 两种写法 等值连接select r.*,b.bummc from t_hq_ryxx r, t_hq_bm b where r.bumbm = b.bumbm select r.*,b.b ...
- Android之Activity的启动模式
启动模式有4种,分别为:1.standard(默认) -- 标准2.singleTop -- 单顶3.singleTask -- 单任务4.singleInstance: -- 单例 -- 如果 ...
- top显示的内存各项参数解析
top观察进程数据时,会有如下几个内存参数(可以用f选择显示哪些参数): VIRT, RES, SHR, SWAP, CODE, DATA top实际上是从/proc/<pid>/stat ...
- 数据库读写锁的实现(C++)
一.基本概念 在数据库中,对某数据的两个基本操作为写和读.分布有两种锁控制:排它锁(X锁).共享锁(S锁). 排它锁(x锁):若事务T对数据D加X锁,则其他不论什么事务都不能再对D加不论什么类型的锁. ...
- iOS:UICollectionView纯自定义的布局:堆叠式布局、圆式布局 (一般用来制作相册)
集合视图的自动布局:UICollectionViewLayout是抽象根类,必须用它的子类才能创建实例,下面是重写的方法,计算item的布局属性 //每一次重新布局前,都会准备布局(苹果官方推荐使用该 ...
- 机器学习算法实践:朴素贝叶斯 (Naive Bayes)(转载)
前言 上一篇<机器学习算法实践:决策树 (Decision Tree)>总结了决策树的实现,本文中我将一步步实现一个朴素贝叶斯分类器,并采用SMS垃圾短信语料库中的数据进行模型训练,对垃圾 ...
- Java源码中遇到的一些问题(更新中)
1子类和父类实现同样的接口,这样做有什么意义吗? 举例:Vector和AbstractList的类签名 public class Vector<E> extends AbstractLis ...