python 知乎 合并 pdf_一键下载:将知乎专栏导出成电子书
原標題:一鍵下載:將知乎專欄導出成電子書
老是有同學問,學了 Python 基礎后不知道可以做點什么來提高。今天就再用個小例子,給大家講講,通過 Python和爬蟲,可以完成怎樣的小工具。
在知乎上,你一定關注了一些不錯的專欄(比如 Crossin的編程教室)。但萬一有那么一天,你喜歡的答主在網上被人噴了,一怒之下刪帖停更,這些好內容可就都看不到了。盡管這是小概率事件(可也不是沒發生過),但未雨綢繆,你可以把關注的專欄導出成電子書,這樣既可以離線閱讀,又不怕意外刪帖了。
只是需要工具和源碼的可以拉到文章底部獲取代碼。
【最終效果】
運行程序,輸入專欄的 id,也就是網頁地址上的路徑:
之后程序便會自動抓取專欄中的文章,并按發布時間合并導出為 pdf文件。
【實現思路】
這個程序主要分為三個部分:
抓取專欄文章地址列表
抓取每一篇文章的詳細內容
導出 PDF1. 抓取列表
在之前的文章 爬蟲必備工具,掌握它就解決了一半的問題 中介紹過如何分析一個網頁上的請求。按照其中的方法,我們可以通過開發者工具的 Network 功能找出專欄頁面獲取詳細列表的請求:
https://www.zhihu.com/api/v4/columns/crossin/articles
觀察返回結果中發現,通過 next 和 is_end 的值,我們能獲取下一次列表請求的地址(相當于向下滾動頁面的觸發效果)以及判斷是否已經拿到所有文章。
而 data 中的 id、title、url 就是我們需要的數據。因為 url 可以通過 id 拼出,所以我們的代碼里未保存它。
使用一個 while 循環,直到抓取完所有文章的 id 和 title,保存在文件中。
whileTrue: resp = requests.get(url, headers=headers) j = resp.json() data = j[ 'data']
forarticle indata:
# 保存id和title(略)ifj[ 'paging'][ 'is_end']:
breakurl = j[ 'paging'][ 'next']
# 按 id 排序(略)
# 導入文件(略)
2. 抓取文章
有了所有文章的 id / url,后面的抓取就很簡單了。文章主體內容就在 Post-RichText 的標簽中。
需要稍微花點功夫的是一些文本上的處理,比如原頁面的圖片效果,會加上 no 標簽和 data-actual、src="data:image 這樣的屬性,我們為了正常顯示得把它們去掉。
url = 'https://zhuanlan.zhihu.com/p/'+ idhtml = requests.get(url, headers=headers).textsoup = BeautifulSoup(html, 'lxml')content = soup.find(class_= 'Post-RichText').prettify()
# 對content做處理(略)
withopen(file_name, 'w') asf: f.write(content)
到這一步,就已經完成了所有內容的抓取,可以在本地閱讀了。
3. 導出 PDF
為了更便于閱讀,我們使用 wkhtmltopdf+ pdfkit,將這些 HTML 文件打包成 PDF。
wkhtmltopdf 是一個 HTML 轉 PDF 的工具,需要單獨安裝,具體可參考它的官網介紹。
https://wkhtmltopdf.org/downloads.html
https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf
pdfkit 是對此工具封裝的 Python 庫,可從 pip 安裝:
pip install pdfkit
使用起來很簡單:
# 獲取htmls文件名列表(略)
pdfkit.from_file(sorted(htmls), 'zhihu.pdf')
這樣就完成了整個專欄導出。
不僅是知乎專欄,幾乎大多數信息類網站,都是通過 1.抓取列表2.抓取詳細內容這兩個步驟來采集數據。因此這個代碼稍加修改,即可用在很多別的網站上。只不過有些網站需登錄后訪問,那么就需要對 headers里的 cookie信息進行設置。此外,不同網站的請求接口、參數、限制都不盡相同,所以還是要具體問題具體分析。
關于這些爬蟲的開發技巧,都可以在我們的爬蟲實戰課程中學到。有需要的請在公眾號里回復 爬蟲實戰
【源碼下載】
獲取知乎專欄下載器源碼,請在公眾號(Crossin的編程教室)里回復關鍵字 知乎
除了代碼外,本專欄打包好的 PDF也一并奉上,歡迎閱讀與分享。
crossincode.com返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的python 知乎 合并 pdf_一键下载:将知乎专栏导出成电子书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xs资料网-产品设计图档下载_proe玩
- 下一篇: python旋转排序数组_LeetCod