用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(3) title = browser.title.split(',')[0]#获取漫画标题 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(3) dirname = basedir+'/'+browser.title.split('-')[1] 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电子书进行传播,更不要牟利!尊重原作和内容提供商!