想看某一部漫画,但是用手机看感觉屏幕太小,用电脑看吧有太不方面。正好有一部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”下。再继续进行转换步骤。

   另外,网上说的制作过程是

  1. 把所有图片集中在一个文件夹内;
  2. 点击【Add directory】把文件夹添加到列表[注1]
  3. 选择 Kindle 设备型号、输出格式(可选 MOBI、EPUB 和 CBZ);
  4. 根据需要添加参数,如“Horizontal mobi(横屏模式)”等;
  5. 点击【Convert】开始转换。生成的电子书文件和所添加文件夹在同一目录。

  【后记】

  经我测试,最方便的做法是不把所有图片集中在一个文件夹。而是在 “三、制作电子书” 的步骤1 中,按照以下方式进行处理:建立一个《'漫画名字'》文件夹,然后这个文件夹下是类似“第1章”  “第2章”……等文件夹。然后每个章节文件夹里面放入按顺序存放的漫画图片。(具体排序要求参见本文的 “二、整理文件夹顺序” )。然后点击【Add directory】把《'漫画名字'》文件夹添加到列表,再进行转换,这样转换出来的电子书就带有目录和书签效果了!

  请注意版权!仅供自己的编程学习与测试,不要将制作好的mobi电子书进行传播,更不要牟利!尊重原作和内容提供商!

用Python抓取漫画并制作mobi格式电子书的更多相关文章

  1. 使用Python抓取猫眼近10万条评论并分析

    <一出好戏>讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何? 黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演 ...

  2. Python抓取视频内容

    Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...

  3. Python 抓取网页并提取信息(程序详解)

    最近因项目需要用到python处理网页,因此学习相关知识.下面程序使用python抓取网页并提取信息,具体内容如下: #---------------------------------------- ...

  4. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

  5. python抓取性感尤物美女图

    由于是只用标准库,装了python3运行本代码就能下载到多多的美女图... 写出代码前面部分的时候,我意识到自己的函数设计错了,强忍继续把代码写完. 测试发现速度一般,200K左右的下载速度,也没有很 ...

  6. python抓取网页例子

    python抓取网页例子 最近在学习python,刚刚完成了一个网页抓取的例子,通过python抓取全世界所有的学校以及学院的数据,并存为xml文件.数据源是人人网. 因为刚学习python,写的代码 ...

  7. Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>

    Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...

  8. 如何用python抓取js生成的数据 - SegmentFault

    如何用python抓取js生成的数据 - SegmentFault 如何用python抓取js生成的数据 1赞 踩 收藏 想写一个爬虫,但是需要抓去的的数据是js生成的,在源代码里看不到,要怎么才能抓 ...

  9. 关于python抓取google搜索结果的若干问题

    关于python抓取google搜索结果的若干问题     前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...

随机推荐

  1. bzoj 3864: Hero meet devil

    bzoj3864次元联通们 第一次写dp of dp (:з」∠) 不能再颓废啦 考虑最长匹配序列匹配书转移 由于dp[i][j]的转移可由上一行dp[i-1][j-1],dp[i-1][j],dp[ ...

  2. luogu P1529 回家 Bessie Come Home

    题目描述 现在是晚餐时间,而母牛们在外面分散的牧场中. 农民约翰按响了电铃,所以她们开始向谷仓走去. 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛). 在挤奶 ...

  3. [COCI2015]ZGODAN

    题目大意: 给你一个数$n(n\leq10^1000)$,定义一个数是“美丽数”当且仅当这个数各个数位上的数奇偶性不同. 求最接近$n$的“美丽数”,若有多个,则依次输出. 思路: 贪心+高精度. 首 ...

  4. 【NOIP模拟赛】【乱搞AC】【奇技淫巧】【乘法原理】回文串计数

    回文串计数 (calc.pas/calc.c/calc.cpp) [题目描述] 虽然是一名理科生,Mcx常常声称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名的热爱,这也促使他走向了以记忆量 ...

  5. 6.NFC之非NDEF格式

    先看流程图 使用步骤: 第一步:声明权限 <!-- 允许应用程序使用NFC功能 --> <uses-permission android:name="android.per ...

  6. mysql系列-安装及服务启动

    一.window下的安装 详细见官网 https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html 以 MySQL 5.1 免安装 ...

  7. 理解 VMWare的3种网络模型 z

    在说到VMware的网络模型之前,先说一下VMware的几个虚拟设备: ■ VMnet0:这是VMware用于虚拟桥接网络下的虚拟交换机: ■ VMnet1:这是VMware用于虚拟Host-Only ...

  8. 15 个 Docker 技巧和提示

    CLI(Command Line Interface,命令行) 好的 docker ps 输出 将 docker ps 输出通过管道重定向到 less -S,避免折行: docker ps -a |  ...

  9. malloc,free和new,delete之间的区别

    1.malloc free 是c语言里面的,不过在c++中也能使用,这个只是申请的一块内存,一般不能申请对象的内存空间:2.new delete,是c++的,申请的也是一块内存,只是这个可以申请对象. ...

  10. django 用model来简化form

    django里面的model和form其实有很多地方有相同之处,django本身也支持用model来简化form 一般情况下,我们的form是这样的 from django import forms ...