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