大家可能平時都有在百度文庫下載文檔的經歷,費盡心思好不容易在文庫找了一份可以用的資料,一看需要用下載券下載,搞的人很煩。
有的人為了節省時間,就任性辦理了個文庫VIP,再也不用糾結怎么下文檔了。如果你是一個百度文庫的重度用戶,這樣做當然沒問題了。
但有些學生黨、上班族,他們可能只是為了交個作業,做一個產品匯報的PPT等等,對這部分人群再去辦理VIP,我覺得沒必要,畢竟掙錢也不容易,咱能省就省。
有的人會說,我會選擇去某寶買下載券,需要用的時候,用賣家給的賬戶和密碼下載就可以了,這個方法我也用過,不過隨著百度文庫不斷修復漏洞,一些賣家的賬戶和密碼,很快就會失效,這也不是一個長久之計。
當然除了我上面說的這些方法外,還有一些其他的神操作,比如,自己一點點去復雜粘貼、放到手機版的百度文庫APP里,再另存為文章、或者用眾所周知的“冰點文庫”……
在我看來,這些都不是最優的解決方案,我今天就和大家分享一個我自己用Python寫的百度文庫免下載券的小項目。當然,這個項目主要是用來學習Python爬蟲的,如果有任何侵權嫌疑,請聯系我刪除!
1.優點
不僅可以下載word文檔,而且能下載PPT;
可以下載一個完整的文檔;
不需要用一些某寶賣家的漏洞網址。
2.準備工作
(1)本次程序主要用到了火狐瀏覽器的selenium,大家可以在下面網址下載自己火狐瀏覽器對應的驅動geckodriver。下載地址:https://github.com/mozilla/geckodriver/releases/
下載解壓后,將geckodriver.exe安裝在Python的安裝目錄Scripts里面,之后就可以正常使用了。
(2)因為本次項目還涉及到了PPT文檔的下載,所以,如果你沒安裝pptx模塊,需要在命令行輸入pip3 installpython-pptx提前安裝好。
3.PPT文檔下載
首先我們隨便找一個需要下載券的PPT文檔,本文以https://wenku.baidu.com/view/a132c661eef9aef8941ea76e58fafab069dc443d.html?rec_flag=default&sxts=1570202117357為例,打開開發者工具,對文檔中圖片進行分析,如下圖所示:
圖片保存在標簽為div里面,所以寫代碼時首先需要找到這個標簽,然后再把圖片的url提取出來,同時,提取url時還要注意,有的屬性是“src”,有的是“data-src”,不然就會出現文檔丟失。主要代碼如下:
4.下載圖片
提取到圖片的url后,就可以下載所有的圖片,并以pictures命名保存在指定的路徑下。代碼如下:
5.組合成PPT
此時需要將上面下載好的圖片,利用編寫的函數重新合成ppt,這里就要用到剛才提前準備好的生成PPT需要的包,此外,為了保證程序順利運行,還需要一個ppt模板,這個模板里面只有一個圖片的占位,主要是為了讓所有圖片安裝模板來創建成新的幻燈片。代碼如下:
6.word文檔下載
關于文檔下載,本文以https://wenku.baidu.com/view/1b5ee5dbad51f01dc281f13e.html?sxts=1570243034873為例。
主要難點是當頁數過多時,會出現“繼續閱讀”的字樣,此時需要selenium模擬人去自動點擊,所以,需要提取找到“繼續閱讀”的按鈕;另外,還要獲取文檔的下載總頁碼,最后還需要對提取的文本進行分段整理。
(1)、尋找“繼續閱讀”位置
本文主要用到了正則表達式,以及js語法。首先要找到繼續閱讀的位置,如下圖所示:
(2)、獲取總頁數
要獲取整個文檔,首先要找到文檔的總頁數,在下圖中找到保存總頁數的標簽。
還要分析文檔中的文字保存在哪個標簽,如下圖所示:
可以看到,文字主要保存在p標簽里,我們找到相應的p標簽,然后遍歷每一頁,提取文字。最后,還要設置一個判斷變量,因為提取的文字會有很多行,有的是一個段的,有的不是一段的文字,這里需要處理一下,主要代碼如下:
7.寫入文檔
將下載好的文檔,以特定的名字寫入新的文檔,這里沒什么難度,代碼如下:
8.結果展示
(1)、PPT下載
(2)、word下載
總結
今天分享的這個用百度文庫免下載券的實戰項目,主要用自動化測試工具selenium,可以幫助大家獲取一些付費的學習資料,大家不用再去某寶買下載券,或者辦VIP了,如果有感興趣的小伙伴,后臺回復「文庫」即可獲得項目源代碼。
最后,再次聲明,本次項目主要用來學習Python爬蟲,不能拿來商用,本人概不承擔所有法律責任,如果有侵權,請聯系作者,我馬上刪除。