百度文庫文章提取器(上)

用過百度文庫的小夥伴大部分都會有這種煩惱,不知如何描述,上這張圖你大概就明白了
百度文庫
起初的解決方案是按F12然後選擇元素、複製。即使這樣也只能一句話一句話的複製內容,後來隨着照相取字app的出現這一問題似乎出現轉機,但基於app的操作、廣告、識別精度等問題讓我感覺玩不來玩不來。學了爬蟲之後一直想做個只需要文章鏈接就能爬取整篇文章的爬蟲程序,後來。。。我做出來了(本來想寫自己如何如何努力,然後取得成功,不過想想自己的語文功底還是算了)
爬蟲的成功少不了這位大佬的視頻:https://www.bilibili.com/video/av62819906?from=search&seid=13649877673142418178
另外在GitHub找到一份代碼應該是這位大佬寫的:https://github.com/Jack-Cherish/python-spider/commit/3c5480d4a187265c0884f5e20019e854150ed306
由於是18年的教程,隨着百度文庫的更新現在爬取規則已經發生變化,在弄明白整個爬蟲程序的開發流程後我決定重新寫一個適用現在文庫規則的爬蟲。這篇文章主要講百度文庫的爬取思路,如果需要源碼請移步:https://blog.csdn.net/qq_26024785/article/details/105075077

第一步:明確文章展示方式

經過大量的隨機瀏覽文章,我發現百度文庫的文章閱讀頁有兩種版式,我們稱之爲新版舊版,神奇的事情是同一篇文章的版式是隨機的,即你在不同的時間訪問同一篇文章,文章閱讀頁可能是新版也可能是舊版,在這裏討論新版和舊版是因爲爬取規則不同,文章內容不受影響。
舊版:舊版百度文庫
這個版本的文章大佬的程序應該還是可以正常爬取的。
新版:新版百度文庫
同時,新版和舊版中又分doc、txt、ppt等多個文章格式,而平時在百度文庫複製文章時大概率是doc和txt格式,所以在寫程序的第一個版本時先滿足自己最基本的需求即可。
在弄明白百度文章的兩個版本之後再確定文章內容的加載方式,最初認爲文章內容的前幾頁在網頁源碼中,剩下幾頁的內容通過點擊閱讀全文後ajax請求再添加到網頁源碼中,後來發現文章所有頁都是通過js代碼後期請求再加載的(這樣做理論上可以提升網頁加載速度)。

第二步:找出文章內容請求鏈接

這一步算是整個程序最難的地方,也是爬蟲程序開發中網頁分析的核心。上面說到每一頁的內容都是通過js代碼後期請求的,那麼網頁源碼中一定有請求的鏈接,不過源碼中鏈接都是含有轉義字符的無法在大量的源碼中一眼識別出來。下面講一下新版doc和txt文檔的請求鏈接是如何找到的

新版doc文檔

首先找到一篇doc格式文章,按F12進入開發者工具,點擊network–>clear–>刷新網頁。這時發現有幾個文件名以0.json開頭的文件數量與文章頁數一直,選中後點擊Preview發現body中就是文章內容
json
preview
這個時候點擊Headers查看Request URLrequest
有些小夥伴可能有點懵找這個url幹啥?前面說了文章的所有內容都是網頁源碼加載完成後再請求–>服務器返回數據–>將內容添加到網頁代碼中,而向服務器請求的url就是這個,所以說找到這個url之後就可以通過幾個關鍵字去網頁源碼中搜所有的請求url(不同頁內容的request url大同小異),比如搜索關鍵字wkbjcloudbos.bdimg.com
source
搜索結果只有6個,正對應文章有6頁內容,有了這個就可以在程序中通過正則表達式提取所有的鏈接,然後我反手給他們request一下,將接收到的數據進行解析提取有效內容。

新版txt文檔

找到一篇txt格式的文章,按F12進入開發者工具,點擊network–>clear–>刷新網頁。可以找到一個名字以文章ID開頭的文件,而這個文件中的數據就是文章內容,而且包含所有頁的內容。
txtId
找到這個文件的請求鏈接
request
將Request URL單獨拿出來分析:
txturl
分析URL後我們可以知道只要在文章URL和源碼中獲取所需要的幾個數據(id、md5sum、sign、rn、rsign)然後拼接成一個URL字符串進行訪問,服務器便會response包含文章內容的文件。
這是新版txt文檔的爬取過程,所需要的幾個數據都可以在網頁源碼中獲取到,而舊版的txt網頁源代碼中不能直接獲取這幾個數據,通過文章ID拼接處URL(https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=’ + ID),訪問該URL,在response中提取需要的md5sum等數據,剩下的操作同上。這個版本還沒有實現對舊版txt文檔的爬取,以後有時間會補上。
其他格式(PPT、PDF、XLS)的文檔爬取方式大同小異,在這裏就不做贅述。

GUI設計

由於這篇文章主要講百度文庫的爬取思路,所以GUI設計這塊一筆帶過,用到的庫是Tkinter,效果演示:
首頁
內容頁
後續有機會的話將會將此項目移植到我的個人博客網站中,以後只需要到我的網站上就能爬取文章。

做這個小工具的初心是爲了提高寫報告、論文的質量與速度,爬取思路及源代碼僅供學習參考,如果需要下載整篇文章請支持正版。

原文鏈接: https://www.jhxblog.cn/article/?articleid=20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章