zoukankan      html  css  js  c++  java
  • 用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('当前章节	{}  下载完毕'.format(browser.title))
        browser.quit()
        print('所有章节下载完毕!')
    
    
    if __name__ == '__main__':
        url = str(input('请输入漫画首页地址:
    '))
        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电子书进行传播,更不要牟利!尊重原作和内容提供商!

  • 相关阅读:
    linux命令---常用组合
    linux---进程相关的命令
    linux命令---系统监控
    linux命令---find
    linux命令---sort
    linux命令---tar
    linux命令---split
    linux命令---awk进阶
    log4net使用方法
    URL编码:不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。
  • 原文地址:https://www.cnblogs.com/codex/p/9377487.html
Copyright © 2011-2022 走看看