python3.基礎爬取網易雲音樂【超詳細版】
簡單學習了python爬蟲之後,我們就可以嘿咻嘿咻了...因為平時就是用網易雲聽的歌,也喜歡看歌裡的評論,所以就爬網易雲音樂評論吧!
正式進入主題
首先還是去找目標網頁並開始分析網頁結構,如下
上面的三個箭頭都是所要找的資料,分別是評論使用者,評論和點贊數,都可以用正規表示式找出來,接下來繼續找怎樣找到下一頁的資料,還是用開發者工具,但是當點選下一頁的時候,網頁的url沒有變,說明網頁是動態載入,所以就不能在當前網頁找資料了,應該在他的xhr檔案裡找,所以點入network看看,然後也點選下一頁一看,果然有想要的
看到這裡,就興奮地去敲程式碼了
一點選執行,結果什麼東西都沒有,但是他的狀態碼是200,明顯請求成功啊,卻沒有東西返回,再去network仔細看看這個網頁,看到他是個post請求,也看到了需要post兩個引數params和ensSecKey
一看到這個,密密麻麻的數字和字母,就猜應該是被加密了,不過可以複製下來看看有沒有用。接下來看下他的Response,咦,這是個json,不是html結構的,所以需要用到Json庫來進行解析
現在開始敲程式碼吧,先把上面的兩個引數複製過來看看。
現在把每條評論的評論使用者和點贊數和評論獲取出來
可以看到,利用json.loads()方法把資料轉成python格式裡的字典後就可以把想要的資料取出來了,但是,下一頁怎樣取?總不能每次都複製貼上那兩個引數吧?那唯一的方法就是不爬了。。怎麼可能?我的繼續,那我就要進行破解這兩個引數了,那好繼續看network,因為要加密,肯定要用js進行加密的
看到剛才那個網站的發起者core.js,,然後把它檔案下載下來慢慢研究
儲存後在經過美化,然後進行查詢那個encSecKey引數(ps:JSj'e'tong'yang'de美化網址為www.css88.com/tool/js_bea…
看到window.asrsea()方法有四個引數,先不去管這個函式,先看看他的四個引數是什什,這裡沒必要去研究那四個引數怎樣來的,只需要知道他是什麼,那麼我們可以加點程式碼上去讓他顯示出來,從而利用fiddler來進行除錯
加入程式碼如下
可以分別獲取上面的每一個引數,也把那個params獲取看看,然後在fiddler上操作如下
完成上面的設定後重新整理網頁就可以在console上面找到引數資訊,如果沒有的話這是因為你之前瀏覽該網頁的時候它被快取了下來,所以要清除快取檔案(在清除瀏覽器記錄裡面有)
那個rid有本歌曲的id,明顯是與評論有關的,我試著連翻幾頁後,發現那個offset就是評論偏移數,offset就是(頁數-1)*20,total在第一頁是true,在其他頁是false
同樣的方法也得到第二個引數為:010001
第三個引數為:00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7
第四個引數為:0CoJUm6Qyw8W8jud
接下來就要看window.asrsea()方法是什麼操作的了,還是通過查詢js檔案可以看到這個通過研究i是隨機獲取十六個字元而b函式是AES加密,其中偏移量為0102030405060708,模式為CBC,看回d函式,其中params連續兩次加密,第一次加密時,文字為第一個引數。金鑰為第四個引數,第二次加密時文字為第一次加密的值,金鑰為隨機數a。而encSeckey是一個RSA加密,他的公鑰是第二個引數,模式是第三個引數,文字為那個隨機字串a
終於分析完了,接著開始敲程式碼
先來個獲取第一頁評論的程式碼
這是獲取兩個引數的類
這是解析網易雲音樂和獲取評論的類
然而一點選執行,直接給我報了個錯:TypeError: can't concat str to bytes
再次點選執行,結果還是報錯了:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
這個報錯因為我的json解析錯了,回頭除錯一看,網頁返回的東西是空的,但他的狀態碼是200,這是什麼鬼?接著我再試了把那兩個引數的值直接複製和前面一樣看看,結果執行成功,這就說明我的是加密過程錯了,然後我就回去看了幾篇,看不出什麼錯誤,上網百度找到了這個知乎文章,我把她的程式碼複製過來執行下,結果是可以的,我就繼續看看我和她的區別,原來我在用那個16個隨機字元的時候用錯了,我在兩個引數給了兩個不同的,而是需要給共同一個的,看到這裡,我就直接回去改了下,果然執行成功,程式碼我就不貼出來了,效果如下
接著是獲取每一頁的評論,而每一頁與第一個引數的offset有關,其中的公式為offse=(頁數-1)20*,total在第一頁是true,在其他頁是false
接下來點執行就可以了,但是執行到第八頁的時候出現了這個異常
raise errorclass(errno, errval)
pymysql.err.InternalError: (1366, "Incorrect string value: '\xF0\x9F\x92\x94' for column 'content' at row 1")
這是首頁資料庫效果最後,如果有想一起學習python,爬蟲,可以來一下我的python群【 784758214 】,內有安裝包和學習視訊資料免費分享,好友都會在裡面交流,分享一些學習的方法和需要注意的小細節,每天也會準時的講一些專案實戰案例。找工作什麼最重要?看中的還是你的實戰經驗呀
相關文章
- python3.x爬取網易雲音樂,超詳細版Python
- Python爬蟲實踐--爬取網易雲音樂Python爬蟲
- Python爬取網易雲音樂歌單歌曲Python
- 如何用Python網路爬蟲爬取網易雲音樂歌曲Python爬蟲
- python爬蟲:瞭解JS加密爬取網易雲音樂Python爬蟲JS加密
- Python 爬蟲獲取網易雲音樂歌手歌詞Python爬蟲
- Python 爬蟲獲取網易雲音樂歌手資訊Python爬蟲
- Python爬蟲實踐-網易雲音樂Python爬蟲
- Python 爬取網易雲音樂 自動安裝所需模組Python
- python爬取_網易雲音樂_ 姬和不如_MP3_獲取無損音源Python
- python爬取_網易雲音樂_你的姑娘 _MP3_獲取無損音源Python
- 基於 React + TypeScript 的網易雲音樂ReactTypeScript
- 利用Python網路爬蟲抓取網易雲音樂歌詞Python爬蟲
- 第一彈:puppeteer爬蟲小demo —— 網易雲音樂爬蟲
- Python爬蟲:逆向分析網易雲音樂加密引數Python爬蟲加密
- 仿網易雲音樂webAppWebAPP
- AI音樂,騰訊音樂、網易雲音樂的新版圖?AI
- node爬取網易雲歌曲
- 中國音樂人生存現狀報告:網易雲音樂入駐音樂人超20萬
- 仿網易雲音樂播放介面
- 網易雲音樂歌曲資訊
- python爬蟲之JS逆向某易雲音樂Python爬蟲JS
- 網易雲音樂評論爬蟲(2):歌曲的全部評論爬蟲
- python爬取網頁詳細教程Python網頁
- 手把手教你寫網路爬蟲(1):網易雲音樂歌單爬蟲
- 網易雲歌詞爬取(java)Java
- 2022年網易雲音樂樂評報告
- 用Python程式碼來下載任意指定網易雲歌曲(超詳細版)Python
- 網易雲音樂招股書詳解 線上音樂付費使用者1600萬
- Vue 實現網易雲音樂 WebAppVueWebAPP
- Flutter仿網易雲音樂:播放介面Flutter
- 微信小程式-網易雲音樂微信小程式
- Taro小程式仿網易雲音樂
- Hyperf抓取網易雲音樂評論
- Python爬蟲之js加密破解,抓取網易雲音樂評論生成詞雲Python爬蟲JS加密
- 網易雲音樂財報:2022年網易雲音樂營收90億元 同比增長28.5%營收
- 超詳細Java基礎-多型Java多型
- 網易雲音樂基於Flink實時數倉實踐