想看某一部漫画,但是用手机看感觉屏幕太小,用电脑看吧有太不方面。正好有一部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. iOS 获取当前经纬度

    一般说来LBS功能一般分为两块:一块是地理定位,就是获取当前精度.纬度和地理位置的功能,这一部分功能主要用到CoreLocation.Frameworks.一部分就是显示地图信息.丰富地图内容等,这一 ...

  2. linux-网络监控命令-netstat进阶

    2.网络连接状态详解共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的.1).LISTEN:首先服务端需要打开一个socket进行监听,状态为LIST ...

  3. DATASNAP数据提交之FIREDAC的TFDJSONDeltas

    DATASNAP数据提交之FIREDAC的TFDJSONDeltas FIREDAC的TFDJSONDeltas相当于CLIENTDATASET的DELTA,是作为CLIENTDATASET.DELT ...

  4. Spring: aop自动标注时出现 “0 formal unbound in pointcut"

    异常代码信息: org.springframework.beans.factory.BeanCreationException: Error creating bean with name forma ...

  5. Jsp中如何在<c:forEach>标签内获取集合的长度

    利用jstl标签functions的prefix属性的length属性值 1.首先在jsp页面导入jstl function标签 <%@ taglib prefix="fn" ...

  6. zabbix通过snmp监控linux主机

    1.安装net-snmp [root@db01 ~]# yum install -y net-snmp 2.修改配置文件 [root@db01 ~]# vim /etc/snmp/snmpd.conf ...

  7. 2017.6.27 jdbc基本使用

    参考来自:http://www.runoob.com/w3cnote/jdbc-use-guide.html 1.jdbc的执行流程 JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系 ...

  8. 前端存储之indexedDB

    在前一个阶段的工作中,项目组要开发一个平台,为了做出更好的用户体验,实现快速.高质量的交互,从而更快得到用户的反馈,要求在前端把数据存储起来,之后我去研究了下现在比较流行的前端存储数据库,找到了ind ...

  9. 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_枚举

    在Duts的文件夹上右击,可以声明一个枚举类型,按照格式填写所有类型(注意枚举的元素前面都是逗号,最后一个不需要符号)   在正常使用的时候,枚举的单词可以当全局变量来用     更多教学视频和资料下 ...

  10. kali渗透综合靶机(一)--Lazysysadmin靶机

    kali渗透综合靶机(一)--Lazysysadmin靶机 Lazysysadmin靶机百度云下载链接:https://pan.baidu.com/s/1pTg38wf3oWQlKNUaT-s7qQ提 ...