想看某一部漫畫,但是用手機看感覺屏幕太小,用電腦看吧有太不方面。正好有一部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電子書進行傳播,更不要牟利!尊重原作和內容提供商!