給大家分享一篇 用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電子書進行傳播,更不要牟利!尊重原作和內容提供商!
整理不易,如果覺得有所幫助,希望可以留下您的精彩言論再走。趕快為你們最喜歡的框架打Call吧。大家如果需要Python的學習資料可以加我的Qun:834179111,小編整理了,從Python入門零基礎到專案實戰的資料。歡迎還沒有找到方向的小夥伴來學習。