用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”下。再繼續進行轉換步驟。

   另外,網上說的制作過程是

  1. 把所有圖片集中在一個文件夾內;
  2. 點擊【Add directory】把文件夾添加到列表[注1]
  3. 選擇 Kindle 設備型號、輸出格式(可選 MOBI、EPUB 和 CBZ);
  4. 根據需要添加參數,如“Horizontal mobi(橫屏模式)”等;
  5. 點擊【Convert】開始轉換。生成的電子書文件和所添加文件夾在同一目錄。

  【后記】

  經我測試,最方便的做法是不把所有圖片集中在一個文件夾。而是在 “三、制作電子書” 的步驟1 中,按照以下方式進行處理:建立一個《'漫畫名字'》文件夾,然后這個文件夾下是類似“第1章”  “第2章”……等文件夾。然后每個章節文件夾里面放入按順序存放的漫畫圖片。(具體排序要求參見本文的 “二、整理文件夾順序” )。然后點擊【Add directory】把《'漫畫名字'》文件夾添加到列表,再進行轉換,這樣轉換出來的電子書就帶有目錄和書簽效果了!

  請注意版權!僅供自己的編程學習與測試,不要將制作好的mobi電子書進行傳播,更不要牟利!尊重原作和內容提供商!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM