1. 環(huán)境準(zhǔn)備
安裝calibre
點(diǎn)擊這里去官網(wǎng)下載對應(yīng)自己系統(tǒng)的版本蝗锥,三個(gè)平臺(tái)都支持(就喜歡這樣跨平臺(tái)的軟件)。
驗(yàn)證安裝是否成功
打開terminal (如果是瘟都死系統(tǒng)可以打開cmd 或者 power shell)你画,輸入ebook-convert
出現(xiàn)如下提示,說明安裝成功了桃漾。
2. 腳本編寫
原理
calibre使用Python來抓取網(wǎng)頁數(shù)據(jù)坏匪,.recipe文件其實(shí)就是Python腳本。如果懂一些Python撬统,那最好不過了适滓。這個(gè)腳本關(guān)鍵點(diǎn)就兩個(gè):
繼承BasicNewsRecipe類
實(shí)現(xiàn)parse_index(self)方法
干貨來了
新建一個(gè)后綴為.recipe文件,將以下代碼復(fù)制粘貼進(jìn)去恋追。編輯的時(shí)候凭迹,記得當(dāng)成Python腳本,否則縮進(jìn)造成的坑苦囱,你懂得嗅绸。
#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
class E_Book(BasicNewsRecipe):
title = 'GO web 編程'
description = 'go語言教程'
max_articles_per_feed = 500
url_prefix = 'https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/'
no_stylesheets = True
remove_javascript = True
keep_only_tags = [{ 'class': 'book-body' }]
# remove_tags=[{'class':'x-wiki-info'}]
# remove_tags_after=[{'class':'x-wiki-content x-content'}]
def get_title(self, link):
return link.get_text().replace('\n',"").replace(' ',"")
def parse_index(self):
soup = self.index_to_soup(self.url_prefix)
div = soup.find('ul', { 'class': 'summary' })
articles = []
for link in div.findAll('a'):
til = self.get_title(link)
url = self.url_prefix + link['href']
a = { 'title': til, 'url': url }
articles.append(a)
tutorial = [(self.title, articles)]
return tutorial
腳本說明
哈哈,明明就是Python的語法撕彤!
-
E_book
自定義的類鱼鸠,必須繼承BasicNewsRecipe
(劃重點(diǎn))。名字符合命名規(guī)范即可羹铅。 -
title
父類中的成員變量蚀狰。書名,值可以任意修改睦裳。 -
description
父類中的成員變量造锅。 對生成電子書的描述,值可以任意修改廉邑。 -
max_articles_per_feed
父類中的成員變量哥蔚。 目錄索引的最大數(shù)目倒谷,就是目錄中指向文章的鏈接數(shù)目。自己大概估算下就好糙箍,一般的500就夠了(當(dāng)然渤愁,你要抓取《本草綱目》就遠(yuǎn)遠(yuǎn)超過500了)。 -
url_prefix
這個(gè)就要抓取電子書的地址深夯,視情況而定抖格。跟后面的parse_index
方法中抓取的文章鏈接拼接成完整的URL。 -
keep_only_tags
父類中的成員變量咕晋。生成的電子書要保留的節(jié)點(diǎn)內(nèi)容,畢竟整個(gè)網(wǎng)頁上多余的東西太多了掌呜,我們只需要保留書本正文內(nèi)容即可滓玖。可以有多個(gè)质蕉。例如:keep_only_tags = [{'class':'book-body},{'id':"abc"}]
势篡。這個(gè)根據(jù)具體情況修改,示例中是針對gitbook電子書的節(jié)點(diǎn)設(shè)置的模暗。 -
remove_tags
和remove_tags_after
這兩個(gè)酌情使用禁悠,跟keep_only_tags
相反,目的是移除無用的節(jié)點(diǎn)兑宇。自己可以試試修改移除每章后面的link標(biāo)簽后面的內(nèi)容碍侦,看看效果。 -
parse_index
(加粗劃重點(diǎn))必須實(shí)現(xiàn)的方法顾孽,返回一個(gè)內(nèi)容為元組
(書名和目錄列表的鏈接地址)的list
祝钢,注意元組中的鏈接要拼接成完整的地址。具體實(shí)現(xiàn)要看對應(yīng)的a標(biāo)簽如何過濾若厚。 -
get_title
這個(gè)是自定義的方法拦英,目的是拿到a標(biāo)簽中的標(biāo)題內(nèi)容。這里有個(gè)大坑测秸,就是內(nèi)容里面有換行符是不行的疤估,否則抓出來的目錄標(biāo)題都是未知
。
3. 運(yùn)行腳本
腳本編好了之后霎冯,我們把他保存為go_web.recipe
铃拇。
打開terminal,輸入 ebook-convert go_web.recipe GoWeb.epub
等待執(zhí)行結(jié)束沈撞,我們就看到生成了GoWeb.epub
這本電子書慷荔。當(dāng)然我們也可以輸出個(gè)pdf文件(GoWeb.pdf
)或者mobi文件(GoWeb.mobi
)
總結(jié)
只要修改url_prefix
的值,就可以抓取gitbook生成的在線電子書了缠俺。
如果你覺得對你油幫助显晶,請支持下作者哦贷岸!