原創(chuàng) 菜鳥(niǎo)哥 菜鳥(niǎo)學(xué)Python 3天前 最近臨近開(kāi)學(xué)了,大家都在忙著準(zhǔn)備各種學(xué)習(xí)的資料,準(zhǔn)備在新的學(xué)期好好學(xué)習(xí),充實(shí)自己。小編身邊的同學(xué)也是如此,最近,小編的同學(xué)小麗就遇到了一個(gè)很棘手的問(wèn)題。 她想將一個(gè)網(wǎng)頁(yè)的Python學(xué)習(xí)的教程打印下來(lái),方便自己來(lái)學(xué)習(xí),但是上千頁(yè)的教程,如果通過(guò)手動(dòng)的方式,一個(gè)一個(gè)的去轉(zhuǎn)成pdf并保存到本地,實(shí)在是麻煩的不。這就是一個(gè)html轉(zhuǎn)pdf的問(wèn)題,其實(shí)網(wǎng)上有很多不錯(cuò)的html資源,但是苦于學(xué)習(xí)起來(lái),不方便!于是小編就跟小麗保證,這點(diǎn)小事包在我身上。今天,小編就跟分享一下如何用Python把html資料變成pdf。01.抓取的學(xué)習(xí)資料如今網(wǎng)上的在線學(xué)習(xí)資料可謂是多如牛毛,為了方便講解,小編就利用python3.9.2的中文文檔作為演示的例子,來(lái)將其抓取并保存到本地,其網(wǎng)頁(yè)鏈接如下:https://docs./zh-cn/3.9/tutorial/index.html 打開(kāi)上述鏈接后,大家會(huì)在網(wǎng)頁(yè)中找到不同內(nèi)容的鏈接地址,包括了基礎(chǔ)的python字符、python語(yǔ)法等內(nèi)容。
02.獲取網(wǎng)頁(yè)鏈接在上圖中,我們需要格外關(guān)注的是紅色方格標(biāo)注的鏈接,每個(gè)鏈接都會(huì)跳轉(zhuǎn)到對(duì)應(yīng)的子網(wǎng)頁(yè)中,而在子網(wǎng)頁(yè)中,就是我們想要保存的內(nèi)容。 可以看到,上圖中,在python速覽子頁(yè)面中,包含了我們需要提取的文字內(nèi)容。所以將html內(nèi)容保存為pdf的第一步便是獲取到子頁(yè)面的鏈接。由于教程大都是固定內(nèi)容,因此對(duì)于教程的網(wǎng)頁(yè),大都采用的是靜態(tài)頁(yè)面,在網(wǎng)頁(yè)源代碼中可以很輕松的找到子頁(yè)面的網(wǎng)頁(yè)鏈接。對(duì)于子網(wǎng)頁(yè)的鏈接抓取,程序如下圖所示:程序中,通過(guò)BeautifulSoup庫(kù)來(lái)解析網(wǎng)頁(yè)源代碼,然后提取所有的子頁(yè)面鏈接地址并返回,如果抓取失敗,則直接返回None。03.html轉(zhuǎn)pdf 在得到子網(wǎng)頁(yè)的鏈接后,接下來(lái)就是將html的子網(wǎng)頁(yè)保存為pdf文件。小編使用的pdfkit庫(kù),pdfkit庫(kù)可以將網(wǎng)頁(yè)保存為pdf文檔。首先小編來(lái)介紹一下pdfkit庫(kù)的安裝。- 下載https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.mxe-cross-win64.7z 并解壓到本地文件中。(后臺(tái)輸入:pdf) 直接獲取。
- 將解壓文件中的bin文件路徑添加到系統(tǒng)變量Path中。
- 執(zhí)行
pip install pdfkit - 執(zhí)行
pip install wkhtmltopdf 按照上述的操作流程,就可以安裝pdfkit庫(kù)。對(duì)于pdfkit庫(kù)的使用,常見(jiàn)的用法有以下三種:上面的程序主要完成幾下幾步: 首先需要指定wkhtmltopdf.exe文件的路徑; 然后分別通過(guò)from_url、from_file和from_string的三種方式來(lái)保存為pdf文件; 需要注意的是,from_file和from_url中的第一個(gè)參數(shù)必須是一個(gè)html的字符串或者是html文檔的列表; 但是小編通過(guò)程序運(yùn)行發(fā)現(xiàn),from_url第一個(gè)參數(shù)只能是html的字符串,不能是html的列表。
因此,pdfkit庫(kù)只能將子網(wǎng)頁(yè)保存為單獨(dú)的pdf文檔,無(wú)法直接通過(guò)pdfkit庫(kù)將所有的子網(wǎng)頁(yè)拼接成一個(gè)完整的pdf文檔,小編通過(guò)PyPDF2庫(kù)中的PdfFileMerger類(lèi)來(lái)實(shí)現(xiàn)pdf文檔的拼接。程序如下圖所示。 程序中首先將所有的html網(wǎng)頁(yè)保存為單獨(dú)的pdf文檔,然后通過(guò)PdfFileMerger類(lèi)對(duì)象來(lái)實(shí)現(xiàn)pdf文檔的拼接。最后就可以得到全部的pdf內(nèi)容。最后我們通過(guò)視頻的展示,來(lái)看一下程序的效果吧。除此之外,程序不光可以抓取python3.9的中文文檔,針對(duì)其他的在線文檔,只需要對(duì)獲取網(wǎng)頁(yè)鏈接的程序進(jìn)行修改即可抓取,例如對(duì)于Flask中文文檔的抓取,程序只需要按照下圖進(jìn)行修改,即可將Flask的在線文檔保存為PDF文檔。04.總結(jié)學(xué)習(xí)Python其實(shí)非常有趣,也很有用。因?yàn)镻ython有大量的現(xiàn)成的庫(kù),可以幫助我們把工作中的很多瑣碎的煩事輕松解決。小編將上述的程序稍加修改,很快就幫阿麗搞定了教程,保存為pdf發(fā)送給了她,小編與女神的關(guān)系更拉近了一步。其實(shí)源碼非常簡(jiǎn)單,大家也照著敲一邊(看千邊讀萬(wàn)邊,不如自己動(dòng)手敲一邊),有不懂的地方可以找小助手(公眾號(hào)后臺(tái)輸入:小助手)。為了方便大家更好的理解,我們會(huì)錄制一個(gè)完整的視頻在B站(詳細(xì)見(jiàn)閱讀原文),一步一步講解這個(gè)程序,到時(shí)把源碼和視頻一起奉上!
|