溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python語言怎么爬取網(wǎng)易云音樂

發(fā)布時間:2022-01-13 15:28:43 來源:億速云 閱讀:188 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下python語言怎么爬取網(wǎng)易云音樂,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

正式進入主題

首先還是去找目標(biāo)網(wǎng)頁并開始分析網(wǎng)頁結(jié)構(gòu),如下

python語言怎么爬取網(wǎng)易云音樂

上面的三個箭頭都是所要找的數(shù)據(jù),分別是評論用戶,評論和點贊數(shù),都可以用正則表達式找出來,接下來繼續(xù)找怎樣找到下一頁的數(shù)據(jù),還是用開發(fā)者工具,但是當(dāng)點擊下一頁的時候,網(wǎng)頁的url沒有變,說明網(wǎng)頁是動態(tài)加載,所以就不能在當(dāng)前網(wǎng)頁找數(shù)據(jù)了,應(yīng)該在他的xhr文件里找,所以點入network看看,然后也點擊下一頁一看,果然有想要的

python語言怎么爬取網(wǎng)易云音樂

看到這里,就興奮地去敲代碼了

python語言怎么爬取網(wǎng)易云音樂

一點擊運行,結(jié)果什么東西都沒有,但是他的狀態(tài)碼是200,明顯請求成功啊,卻沒有東西返回,再去network仔細看看這個網(wǎng)頁,看到他是個post請求,也看到了需要post兩個參數(shù)params和ensSecKey

python語言怎么爬取網(wǎng)易云音樂

一看到這個,密密麻麻的數(shù)字和字母,就猜應(yīng)該是被加密了,不過可以復(fù)制下來看看有沒有用。接下來看下他的Response,咦,這是個json,不是html結(jié)構(gòu)的,所以需要用到Json庫來進行解析

python語言怎么爬取網(wǎng)易云音樂

現(xiàn)在開始敲代碼吧,先把上面的兩個參數(shù)復(fù)制過來看看。

python語言怎么爬取網(wǎng)易云音樂

現(xiàn)在把每條評論的評論用戶和點贊數(shù)和評論獲取出來

python語言怎么爬取網(wǎng)易云音樂

可以看到,利用json.loads()方法把數(shù)據(jù)轉(zhuǎn)成python格式里的字典后就可以把想要的數(shù)據(jù)取出來了,但是,下一頁怎樣?。靠偛荒苊看味紡?fù)制粘貼那兩個參數(shù)吧?那唯一的方法就是不爬了。。怎么可能?我的繼續(xù),那我就要進行破解這兩個參數(shù)了,那好繼續(xù)看network,因為要加密,肯定要用js進行加密的

python語言怎么爬取網(wǎng)易云音樂

看到剛才那個網(wǎng)站的發(fā)起者core.js,,然后把它文件下載下來慢慢研究

python語言怎么爬取網(wǎng)易云音樂

保存后在經(jīng)過美化,然后進行查找那個encSecKey參數(shù)(ps:JSj'e'tong'yang'de美化網(wǎng)址為 www.css88.com/tool/js_bea …

python語言怎么爬取網(wǎng)易云音樂

看到window.asrsea()方法有四個參數(shù),先不去管這個函數(shù),先看看他的四個參數(shù)是什什,這里沒必要去研究那四個參數(shù)怎樣來的,只需要知道他是什么,那么我們可以加點代碼上去讓他顯示出來,從而利用fiddler來進行調(diào)試

加入代碼如下

python語言怎么爬取網(wǎng)易云音樂

可以分別獲取上面的每一個參數(shù),也把那個params獲取看看,然后在fiddler上操作如下

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

完成上面的設(shè)置后刷新網(wǎng)頁就可以在console上面找到參數(shù)信息,如果沒有的話這是因為你之前瀏覽該網(wǎng)頁的時候它被緩存了下來,所以要清除緩存文件(在清除瀏覽器記錄里面有)

python語言怎么爬取網(wǎng)易云音樂

那個rid有本歌曲的id,明顯是與評論有關(guān)的,我試著連翻幾頁后,發(fā)現(xiàn)那個offset就是評論偏移數(shù),offset就是(頁數(shù)-1)*20,total在第一頁是true,在其他頁是false

python語言怎么爬取網(wǎng)易云音樂

同樣的方法也得到第二個參數(shù)為:010001

第三個參數(shù)為:00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7

第四個參數(shù)為:0CoJUm6Qyw8W8jud

接下來就要看window.asrsea()方法是什么操作的了,還是通過查找js文件可以看到這個

python語言怎么爬取網(wǎng)易云音樂

通過研究i是隨機獲取十六個字符而b函數(shù)是AES加密,其中偏移量為0102030405060708,模式為CBC,看回d函數(shù),其中params連續(xù)兩次加密,第一次加密時,文本為第一個參數(shù)。密鑰為第四個參數(shù),第二次加密時文本為第一次加密的值,密鑰為隨機數(shù)a。而encSeckey是一個RSA加密,他的公鑰是第二個參數(shù),模式是第三個參數(shù),文本為那個隨機字符串a(chǎn)

終于分析完了,接著開始敲代碼

先來個獲取第一頁評論的代碼

這是獲取兩個參數(shù)的類

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

這是解析網(wǎng)易云音樂和獲取評論的類

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

然而一點擊運行,直接給我報了個錯:TypeError: can't concat str to bytes

python語言怎么爬取網(wǎng)易云音樂

原來是因為在第二次加密的時候,那個params是個byte類型,所以把他轉(zhuǎn)成字符串類型就可以了

python語言怎么爬取網(wǎng)易云音樂

再次點擊運行,結(jié)果還是報錯了:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

python語言怎么爬取網(wǎng)易云音樂

這個報錯因為我的json解析錯了,回頭調(diào)試一看,網(wǎng)頁返回的東西是空的,但他的狀態(tài)碼是200,這是什么鬼?接著我再試了把那兩個參數(shù)的值直接復(fù)制和前面一樣看看,結(jié)果運行成功,這就說明我的是加密過程錯了,然后我就回去看了幾篇,看不出什么錯誤,上網(wǎng)百度找到了這個知乎文章,我把她的代碼復(fù)制過來運行下,結(jié)果是可以的,我就繼續(xù)看看我和她的區(qū)別,原來我在用那個16個隨機字符的時候用錯了,我在兩個參數(shù)給了兩個不同的,而是需要給共同一個的,看到這里,我就直接回去改了下,果然運行成功,代碼我就不貼出來了,效果如下

python語言怎么爬取網(wǎng)易云音樂

接著是獲取每一頁的評論,而每一頁與第一個參數(shù)的offset有關(guān),其中的公式為offse=(頁數(shù)-1)20*,total在第一頁是true,在其他頁是false

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

python語言怎么爬取網(wǎng)易云音樂

接下來點運行就可以了,但是運行到第八頁的時候出現(xiàn)了這個異常

raise errorclass(errno, errval)

pymysql.err.InternalError: (1366, "Incorrect string value: '\xF0\x9F\x92\x94' for column 'content' at row 1")

這是首頁數(shù)據(jù)庫效果

python語言怎么爬取網(wǎng)易云音樂

獲取完成(家駒的歌評論這么少嗎?emmmm...)

python語言怎么爬取網(wǎng)易云音樂

以上是“python語言怎么爬取網(wǎng)易云音樂”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI