python製作電子書
- 2019 年 12 月 31 日
- 筆記
文章目錄
python製作pdf電子書
準備
製作電子書使用的是
python
的pdfkit
這個庫,pdfkit
是wkhtmltopdf
的Python
封裝包,因此在安裝這個之前要安裝wkhtmltopdf
安裝wkhtmltopdf
sudo apt-get install wkhtmltopdf
(ubantu
下,不過這裡安裝的時候可能對應的版本不同,會出現錯誤,如果不行的話還請自己百度下,我安裝的時候是可以的)windows
下的用戶直接到wkhtmltopdf
官網下載穩定版本,然後直接安裝即可,但是安裝之後需要注意的是一定要將其添加到環境變數中,否則會出現找不到路徑的問題
python安裝依賴包
以下都是我們需要用到的庫
pip install requests
pip install BeautifulSoup4
pip install pdfkit
pdfkit的用法
初級了解函數
pdfkit.from_url([url,],'demo.pdf')
這個是直接傳入一個url
或者一個url
列表,然後通過這個函數直接將其網頁轉換成demo.pdf
,注意這裡只能轉換靜態文本,如果使用js一些腳本的話是不能直接轉換的pdfkit.from_string("<h1><a href="https://chenjiabing666.gituhb.io">陳加兵的部落格</a></h1>",'demo.pdf')
這個是直接講一個字元串轉換成pdf
格式的電子書,裡面可以直接傳一個字元串,也可以用html
標籤包裹這個字元串pdfkit.from_file([file_name,],'demo.pdf')
這個是直接傳入一個文件或者一個列表即是多個文件,不過這裡傳入的文件一般都是html格式的文件
進階
當然知道這個是多麼枯燥,生成的電子書書也不能添加各種的樣式,下面我們將會介紹一些添加的樣式的方法
options
這個參數是上面函數的可選參數,其中制定了一些選項,詳情請見http://wkhtmltopdf.org/usage/wkhtmltopdf.txt, 你可以移除選項名字前面的 『–』 .如果選項沒有值, 使用
None
,Falseor
,*
作為字典值,例子如下:
options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8", 'custom-header': [ ('Accept-Encoding', 'gzip') ], 'cookie': [ ('cookie-name1', 'cookie-value1'), ('cookie-name2', 'cookie-value2'), ], 'outline-depth': 10, }
cover
這個參數是用來製作封面的,也是函數中的一個參數,如果想要實現的話可以先寫一個html文本,在其中嵌入幾張圖片或者文字作為封面,然後寫入出傳入函數即可
options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8", 'custom-header': [ ('Accept-Encoding', 'gzip') ], 'cookie': [ ('cookie-name1', 'cookie-value1'), ('cookie-name2', 'cookie-value2'), ], 'outline-depth': 10, } cover='demo.html' pdfkit.from_file('demo.html','demo.pdf',cover=cover,options=options)
css
這裡的css也是函數中的一個可選參數,這個參數主要的作用作用就是在其中定義自己喜歡的樣式,當然這裡也可以傳入一個列表,定義多個樣式css文件,當然沒有這個參數也可以實現定義自己的樣式,只需要在自己的html模板中定義內嵌的樣式,或者直接用
<link>
引用外面的樣式即可,本人親試是可以的,具體的使用如下
css='demo.css' pdfkit.from_file('demo.html','demo.pdf',options=options,cover=cover,css=css)
注意
- 這裡生成
pdf
的時候可能出現中文的亂碼,請一定在html
模板開頭指定字體utf-8
-><meta charset="UTF-8">
- 可能在爬取生成的時候會出現
ascii
錯誤,只需要在py
文件開頭寫下:
import sys import threading reload(sys) sys.setdefaultencoding('utf8')
- 寫入文件的時候不想
python3
一樣可以指定編碼格式,這裡我使用的是codecs
庫,可以向python3一樣指定其中的編碼格式
實戰
本人爬了廖雪峰老師的
python2.7
的教程,並且做成了電子書,截圖如下
注意
- 這裡並沒有使用框架,如果有興趣的朋友可以用框架寫一個爬取全站的
- 這裡的主要用到的是
BeautifulSoup
和requests
,詳情可以看我的部落格中的BeautifulSoup用法,後續還會更新requests的用法 - 源程式碼請見https://github.com/chenjiabing666/liaoxuefeng_pdfkit
參考文章
- http://mp.weixin.qq.com/s/LH8nEFfVH4_tvYWo46CF5Q
- http://www.cnblogs.com/taceywong/p/5643978.html
- http://beautifulsoup.readthedocs.io/zh_CN/latest/#id44