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

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

 

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

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

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

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

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

戰爭序幕

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

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

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

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

終極之戰

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

在通過一系列測試以後,我發現雖然過程有點曲折,但仍是能夠用爬蟲的方式實現自動化的添加資源到網盤。post

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

  • 獲取用戶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/

相關文章
相關標籤/搜索