摘要:在知乎上,你一定關(guān)注了一些不錯的專欄比如的編程教室。有需要的請在公眾號里回復(fù)爬蟲實戰(zhàn)源碼下載獲取知乎專欄下載器源碼,請在公眾號的編程教室里回復(fù)關(guān)鍵字知乎除了代碼外,本專欄打包好的也一并奉上,歡迎閱讀與分享。
老是有同學問,學了 Python 基礎(chǔ)后不知道可以做點什么來提高。今天就再用個小例子,給大家講講,通過 Python 和 爬蟲 ,可以完成怎樣的小工具。
在知乎上,你一定關(guān)注了一些不錯的專欄(比如 Crossin的編程教室)。但萬一有那么一天,你喜歡的答主在網(wǎng)上被人噴了,一怒之下刪帖停更,這些好內(nèi)容可就都看不到了。盡管這是小概率事件(可也不是沒發(fā)生過),但未雨綢繆,你可以把關(guān)注的專欄導出成電子書,這樣既可以離線閱讀,又不怕意外刪帖了。
只是需要工具和源碼的可以拉到文章底部獲取代碼。
【最終效果】運行程序,輸入 專欄的 id ,也就是網(wǎng)頁地址上的路徑:
之后程序便會自動抓取專欄中的文章,并按發(fā)布時間合并導出為 pdf 文件。
【實現(xiàn)思路】這個程序主要分為三個部分:
抓取專欄文章地址 列表
抓取每一篇文章的 詳細內(nèi)容
導出 PDF
1. 抓取列表在之前的文章 爬蟲必備工具,掌握它就解決了一半的問題 中介紹過如何分析一個網(wǎng)頁上的請求。按照其中的方法,我們可以通過 開發(fā)者工具 的 Network 功能 找出專欄頁面獲取詳細列表的請求:
https://www.zhihu.com/api/v4/columns/crossin/articles
觀察返回結(jié)果中發(fā)現(xiàn),通過 next 和 is_end 的值,我們能獲取下一次列表請求的地址(相當于向下滾動頁面的觸發(fā)效果)以及判斷是否已經(jīng)拿到所有文章。
而 data 中的 id、title、url 就是我們需要的數(shù)據(jù)。因為 url 可以通過 id拼出,所以我們的代碼里未保存它。
使用一個 while 循環(huán),直到抓取完所有文章的 id 和 title,保存在文件中。
while True: resp = requests.get(url, headers=headers) j = resp.json() data = j["data"] for article in data: # 保存id和title(略) if j["paging"]["is_end"]: break url = j["paging"]["next"] # 按 id 排序(略) # 導入文件(略)2. 抓取文章
有了所有文章的 id / url,后面的抓取就很簡單了。文章主體內(nèi)容就在 Post-RichText 的標簽中。
需要稍微花點功夫的是一些文本上的處理,比如原頁面的圖片效果,會加上 noscript標簽和 `、highlight">
url = "https://zhuanlan.zhihu.com/p/" + id html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, "lxml") content = soup.find(class_="Post-RichText").prettify() # 對content做處理(略) with open(file_name, "w") as f: f.write(content)
到這一步,就已經(jīng)完成了所有內(nèi)容的抓取,可以在本地閱讀了。
3. 導出 PDF為了更便于閱讀,我們使用 wkhtmltopdf + pdfkit ,將這些 HTML 文件打包成 PDF。
wkhtmltopdf 是一個 HTML 轉(zhuǎn) PDF 的工具,需要多帶帶安裝,具體可參考它的官網(wǎng)介紹。
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")
這樣就完成了整個專欄導出。
不僅是知乎專欄,幾乎大多數(shù)信息類網(wǎng)站,都是通過 1.抓取列表 2.抓取詳細內(nèi)容 這兩個步驟來采集數(shù)據(jù)。因此這個代碼稍加修改,即可用在很多別的網(wǎng)站上。只不過有些網(wǎng)站需登錄后訪問,那么就需要對 headers 里的 cookie 信息進行設(shè)置。此外,不同網(wǎng)站的請求接口、參數(shù)、限制都不盡相同,所以還是要具體問題具體分析。
關(guān)于這些爬蟲的開發(fā)技巧,都可以在我們的 爬蟲實戰(zhàn) 課程中學到。 有需要的請在公眾號里回復(fù) 爬蟲實戰(zhàn)
【源碼下載】獲取知乎專欄下載器源碼,請在公眾號( Crossin的編程教室 )里回復(fù)關(guān)鍵字 知乎
除了代碼外, 本專欄打包好的 PDF 也一并奉上,歡迎閱讀與分享。
════
其他文章及回答:
如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 嘻哈 | 爬蟲 | 我用Python | 高考 | requests | AI平臺
歡迎搜索及關(guān)注: Crossin的編程教室
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42477.html
摘要:其他筆記還有一些其他的主流云筆記軟件,像印象筆記,為知筆記,等,由于沒有多做嘗試,就不加以評價年最好用的云筆記軟件推薦介紹是一種可以使用普通文本編輯器編寫的標記語言,通過簡單的標記語法,它可以使普通文本內(nèi)容具有一定的格式。 目錄: [TOC] Git Git介紹: Git是目前世界上最先進的分布式版本控制系統(tǒng)(沒有之一),簡單來說,Git 是一個管理你的「代碼的歷史記錄」的工具。 Gi...
摘要:前端日報精選帶來的困惑知乎專欄推送技術(shù)之難,真的遠超我們想象奇舞周刊第期深度學習助力前端開發(fā)中的回調(diào)眾成翻譯薦官方譯文和框架源碼版掘金中文筆記事件委托即事件代理知識點第期掌握緩存從請求到響應(yīng)過程的一切下譯行代碼擼一個陰陽八卦 2017-06-24 前端日報 精選 This 帶來的困惑 - 知乎專欄HTTP/2推送技術(shù)之難,真的遠超我們想象奇舞周刊第215期:深度學習助力前端開發(fā)Java...
摘要:前端日報精選你可能不知道的前端知識點譯在服務(wù)端渲染的實現(xiàn)掘金小前端創(chuàng)建或文件并瀏覽器導出下載張鑫旭鑫空間鑫生活代理服務(wù)器淺析知乎專欄快速打造簡易高效的配置掘金中文譯組件解耦之道楓上霧棋的日志第期什么樣的工程師才能算老司機 2017-07-05 前端日報 精選 你可能不知道的前端知識點[譯] React 在服務(wù)端渲染的實現(xiàn) - 掘金小tip:JS前端創(chuàng)建html或json文件并瀏覽器導出...
摘要:使用腳本發(fā)送郵件并不復(fù)雜。以下為思路導圖模塊與發(fā)送郵件相關(guān)的模塊是關(guān)于簡單郵件傳輸協(xié)議的操作模塊,在發(fā)送郵件的過程中起到服務(wù)器之間互相通信的作用。 0. 前言 發(fā)送電子郵件是個很常見的開發(fā)需求。比如你寫了個監(jiān)控天氣的腳本,發(fā)現(xiàn)第二天要下雨,或者網(wǎng)站上關(guān)注的某個商品降價了,就可以發(fā)個郵件到郵箱來提醒自己。 使用 Python 腳本發(fā)送郵件并不復(fù)雜。不過由于各家郵件的發(fā)送機制和安全策略不同...
閱讀 3423·2021-11-24 09:39
閱讀 1812·2021-11-17 09:33
閱讀 3545·2021-10-12 10:12
閱讀 5050·2021-09-22 15:51
閱讀 1124·2019-08-30 13:11
閱讀 3585·2019-08-30 10:59
閱讀 580·2019-08-30 10:48
閱讀 1324·2019-08-26 13:48