利用Python爬蟲實現百度網盤自動化添加資源


事情的起因是這樣的,由於我想找幾部經典電影欣賞欣賞,於是便向某老司機尋求資源(我備注了需要正規視頻,絕對不是他想的那種資源),然后他丟給了我一個視頻資源網站,說是比較有名的視頻資源網站。我信以為真,便激動地點開尋求經典電影,於是便引出了一段經典的百度網盤之戰。

 

免責申明:文章中的工具等僅供個人測試研究,請在下載后24小時內刪除,不得用於商業或非法用途,否則后果自負,文章出現的截圖只做樣例演示,請勿非法使用

先來看下這個視頻網站的截圖:

不得不說,這是一個正規的網站,正規的視頻,只是看着標題的我想多了而已。

懷着滿滿的求知欲,我點開了鏈接,並在網頁下方看到了視頻資源鏈接。

  這里有2種資源,一種是百度網盤,另一種是迅雷種子,不得不說這個網站還是比較良心,相較於只發圖不留種的某些網站。按照正常邏輯,此時我應該點開資源地址靜靜地欣賞起來(不對,其實我不是那樣的人),因此我選擇默默地將資源添加到網盤收藏。看到網盤又多了幾部佳作,心情頓時爽了很多,但僅僅添加幾部作品並沒有滿足我的收藏欲望,於是我便開始探索如何快速將視頻資源自動添加到百度網盤,也由此引發了我對於百度網盤的一系列斗爭。

戰爭序幕

首先通過觀察該網站url構成,以及網頁源碼組成,我決定采用爬取的方式采集資源鏈接地址。
網頁截圖:

該過程並沒有遇到很大的問題,我采用了python+協程的方式進行采集,很快便獲取了一部分資源地址:
百度網盤資源地址:

  寫完采集數據腳本,采集完部分數據已是晚上11點,原本應該洗洗睡了,然而技術探索的力量鼓舞着我繼續前行。目前資源地址都有了,然而對於百度網盤資源,仍然需要一一點開,然后添加到我的網盤,此步驟太耗費精神,因此我決定繼續挖掘自動添加資源到百度網盤的方法。

注意:以下內容是本文的重點技術內容,關乎着我與百度網盤一戰的最終結局,請勿走開,精彩繼續。

終極之戰

首先我通過抓包,查看源碼,審查元素等方式分析了百度分享頁面的特征,判斷其是否適合爬蟲方式。

在經過一系列測試之后,我發現雖然過程有點曲折,但還是可以用爬蟲的方式實現自動化的添加資源到網盤。

要實現這一技術,我總結了以下幾點流程:

  • 獲取用戶cookie(可以手動登錄然后抓包獲取)
  • 首先爬取如:http://pan.baidu.com/s/1o8LkaPc網盤分享頁面,獲取源碼。
  • 解析源碼,篩選出該頁面分享資源的名稱、shareid、from(uk)、bdstoken、appid(app_id)。
  • 構造post包(用來添加資源到網盤),該包需要用到以上4個參數+cookies。

獲取cookie

抓取cookie可以用很多工具,我用了火狐的Tamper插件,效果如下:
獲取登錄的數據包:

查看登錄發送的請求包,發現有賬號密碼,當然我們這里需要的是cookie,可以在response中查看到。

cookie的格式如下:

 

 
        

BAIDUID=52C3FE49FD82573C4ABCEAC5E77800F6:FG=1; 

BIDUPSID=52C11E49FD82573C4ABCEAC5E778F0F6; 

PSTM=1421697115; PANWEB=1; Hm_lvt_7a3960b6f067eb0085b7196ff5e660b0=1491987412; Hm_lpvt_7a3960b6f067eb0085b7f96ff5e6260b0=1491988544; 

STOKEN=3f84d8b8338c58f127c29e3eb305ad41f7c68cefafae166af20cfd26f18011e8;

SCRC=4abe70b0f9a8d0ca15a5b9d2dca40cd6;

PANPSC=16444630683646003772%3AWaz2A%2F7j1vWLfEj2viX%2BHun90oj%2BY%2FIsAxoXP3kWK6VuJ5936qezF2bVph1S8bONssvn6mlYdRuXIXUCPSJ19ROAD5r1J1nbhw55AZBrQZejhilfAWCWdkJfIbGeUDFmg5zwpdg9WqRKWDBCT3FjnL6jsjP%2FyZiBX26YfN4HZ4D76jyG3uDkPYshZ7OchQK1KQDQpg%2B6XCV%2BSJWX9%2F9F%2FIkt7vMgzc%2BT; 

BDUSS=VJxajNlVHdXS2pVbHZwaGNIeWdFYnZvc3RMby1JdFo5YTdOblkydkdTWlVmUlZaSVFBQUFBJCQAAAAAAAAAAAEAAAA~cQc40NLUy7XEwbm359PwABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTw7VhU8O1Yb

 

由於此cookie涉及到個人賬號,因此我做了改動處理,但格式應該是一樣的。

訪問百度資源分享頁面

  請求頁面如:http://pan.baidu.com/s/1o8LkaPc
  獲取cookie以后,可以在訪問百度資源分享頁面時,在headers里面寫入cookie值,並使用該cookie登錄,期間我也失敗過幾次,原因還是需要加上其他header參數(如果不加cookie參數,返回的結果將是”頁面不存在”)。
  請求成功之后,我們可以在源碼中找到一些我們需要的內容,比如頁面分享資源的名稱、shareid、from(uk)、bdstoken、appid(app_id)值。

構造添加資源POST包

首先看下post包的構造:

 

 
        

POST https://pan.baidu.com/share/transfer?shareid=2337815987&from=1612775008&bdstoken=6e05f8ea7dcb04fb73aa975a4eb8ae6c&channel=chunlei&clienttype=0&web=1&app_id=250528&logid= HTTP/1.1

Host: pan.baidu.com

Connection: keep-alive

Content-Length: 169

Accept: */*

Origin: https://pan.baidu.com

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Referer: https://pan.baidu.com/s/1kUOxT0V?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

Cookie: 

filelist=["/test.rar"]&path=/

 

  在post包的url中有一些參數,填寫我們獲取到的內容即可,還有一個logid參數,內容可以隨便寫,應該是個隨機值然后做了base64加密。
  在post包的payload中,filelist是資源名稱,格式filelist=[“/name.mp4”],path為保存到那個目錄下,格式path=/pathname
cookie必須填上,就是之前我們獲取到的cookie值。

最終返回內容

 

{"errno":0,"task_id":0,"info":[{"path":"\/\u5a31\u4e50\u6e38\u620f\/\u4e09\u56fd\u5168\u6218\u6218\u68cb1.4\u516d\u53f7\u7248\u672c.rar","errno":0}],"extra":{"list":[{"from":"\/\u5a31\u4e50\u6e38\u620f\/\u4e09\u56fd\u5168\u6218\u6218\u68cb1.4\u516d\u53f7\u7248\u672c.rar","to":"\/\u4e09\u56fd\u5168\u6218\u6218\u68cb1.4\u516d\u53f7\u7248\u672c.rar"}]}}

 

 

最終如果看到以上內容,說明資源已經成功添加到網盤,如果errno為其他值,則說明出現了錯誤,12代表資源已經存在。

戰績

花費了近1個小時之后,我寫完了代碼,其中大部分時間主要花費在調試與研究數據包上,期間遇到了很多坑,但最終還是解決了。
欣賞下程序運行時的快感吧:

百度網盤的戰果:

搞完這些,寫下這篇文章差不多快半夜12點了,視頻資源我只跑了一小部分,其余的明天繼續。(為了看點視頻容易嗎我?!)

項目GitHub地址:https://github.com/tengzhangchao/BaiDuPan

文章來自個人博客:https://thief.one/2017/04/12/2/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM