用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抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...
随机推荐
- viewflipper的高度设置
由于ViewFlipper的一个子view是这个ImageView,ViewFilpper在切换时,高度总是为子View中高度最大的值作为其高度值. 后经搜索,发现需要设置android:measur ...
- 六. 异常处理4.try和catch的使用
尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时 ...
- 【强连通分量】tarjan算法及kosaraju算法+例题
阅读前请确保自己知道强连通分量是什么,本文不做赘述. Tarjan算法 一.算法简介 Tarjan算法是一种由Robert Tarjan提出的求有向图强连通分量的时间复杂度为O(n)的算法. 首先我们 ...
- linux下安装php报错configure: error: Cannot find MySQL header files under /usr/include/mysql.
linux下安装php报错configure: error: Cannot find MySQL header files under /usr/include/mysql. 2013-03-04 1 ...
- java中/与%的区别
System.out.println(3/5) = 0: System.out.println(2/5) = 0: System.out.println(4/5) = 0: System.out.pr ...
- 【myEcplise2015】导入喜欢的主题
1.在官网下载epf样式文件 http://www.eclipsecolorthemes.org/ 2.选择一个喜欢的点击进入,点击下载 3.File -->Import--->Gener ...
- django自定义过滤器及模板标签
创建一个模板库 不管是写自定义标签还是过滤器,第一件要做的事是创建模板库(Django能够导入的基本结构). 创建一个模板库分两步走: 第一,决定模板库应该放在哪个Django应用下. 如果你通过 m ...
- adb 设备不识别
android真坑 有两台测试机 都能连能snapdragon profiling了 忽然 一台不能识别了 adb devices 就不存在 一台一直是好的 kill server start ser ...
- Haproxy 8种算法+Session共享
Haproxy有8种负载均衡算法(balance),分别如下: 1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法 2.balance static-rr # 根据权重, ...
- Sending SMS And Dialing Numbers without User Consent(Context is not needed)
Sending SMS And Dialing Numbers without User Consent Sending SMS does not require context or user in ...