分享我用NodeJS實(shí)現(xiàn)網(wǎng)略爬蟲抓取網(wǎng)易云音樂評(píng)論的過程

午飯過后準(zhǔn)備看看書,寫寫詩(這么說是不是顯得太裝逼米碰。谷丸。堡掏。)

打開網(wǎng)易云音樂(這不是做廣告,網(wǎng)易沒有給我錢)刨疼,被推薦了一首《Nothing's Gonna Change My Love For You》泉唁,對(duì),你沒看錯(cuò)揩慕,就是這首很經(jīng)典的歌亭畜。作為曾經(jīng)向小伙伴們安利過網(wǎng)易云的我怎么能不看歌曲評(píng)論(又在裝逼)。

很感人有沒有

被感動(dòng)的稀里嘩啦迎卤,欲語淚流 拴鸵。。。想起了自己的那段故事劲藐,此情此景再也抑制不住內(nèi)心的那股洪流八堡,于是靜靜的敲起那些深藏在腦海深處的記憶(賤人就是矯情)

是經(jīng)過籃球場(chǎng),這逼裝的華麗麗的失敗了

不知道你有沒有發(fā)現(xiàn)聘芜,我還是很有才華的(其實(shí)是憋了好久才寫出來的)秕重。

就這樣,拖著腮厉膀,靜靜地發(fā)呆(別問我靜靜是誰),二拐,服鹅,沉寂在這首音樂里,永遠(yuǎn)都不想醒來百新。企软。。


額 額 額饭望。仗哨。。好像扯遠(yuǎn)了铅辞,背景鋪墊完畢厌漂,開始進(jìn)入主題。

網(wǎng)易云音樂每首歌都會(huì)有唯一的ID號(hào)斟珊,在網(wǎng)頁端的網(wǎng)易云音樂里搜索一首歌可以看到瀏覽器地址欄是這樣的

瀏覽器地址欄看到的id

這首歌id號(hào)27955655 對(duì)應(yīng)的是薛之謙的 《我想起你了》 苇倡。頁面往下拉可以看到評(píng)論,分為精彩評(píng)論和最新評(píng)論兩部分囤踩。

我們想抓取用戶評(píng)論的信息除了要知道歌曲ID號(hào)還要知道評(píng)論信息的api地址旨椒。這時(shí)候就要看瀏覽器后臺(tái)了,我用的是Chrome瀏覽器堵漱,F(xiàn)12進(jìn)入后臺(tái)(其他瀏覽器進(jìn)入后臺(tái)的方式你自己找)综慎。點(diǎn)擊Network并重新刷新瀏覽器。這時(shí)會(huì)看到一堆網(wǎng)絡(luò)請(qǐng)求勤庐,經(jīng)過分析示惊,可以發(fā)現(xiàn)下面這個(gè)就是請(qǐng)求用戶評(píng)論的url

url地址

我們點(diǎn)擊它就會(huì)看到瀏覽器解析出的具體數(shù)據(jù),如下圖

瀏覽器解析后的數(shù)據(jù)

看到那個(gè)hotComments和comments了嗎埃元? 哈哈涝涤,這正是我們所需要的數(shù)據(jù)。

現(xiàn)在我們把上面的url地址直接復(fù)制出來放入瀏覽器的地址導(dǎo)航欄中然后回車岛杀。理論上這時(shí)候用戶的評(píng)論信息應(yīng)該會(huì)顯示出來阔拳,但是卻是什么都沒有,心都涼了。

不要?dú)怵H糊肠,繼續(xù)分析辨宠。

我們發(fā)現(xiàn)上面那個(gè)url請(qǐng)求的請(qǐng)求頭是這樣的。

評(píng)論信息請(qǐng)求頭

它采用的是post的方式货裹,而且里面還有一堆數(shù)據(jù)嗤形,而我們直接把這個(gè)url放到地址欄中請(qǐng)求是get方式,且不說方式不對(duì)弧圆,就是請(qǐng)求頭里面一堆數(shù)據(jù)你沒有赋兵,人家網(wǎng)易的服務(wù)器也不認(rèn)識(shí)你呀。于是我們只能通過代碼的方式去驗(yàn)證了搔预。

我們把正確的請(qǐng)求頭拷貝出來放到我們自己定義的對(duì)象中霹期。然后程序發(fā)請(qǐng)求時(shí)把這個(gè)對(duì)象傳進(jìn)去不就行了嗎??

我們定義的自己的請(qǐng)求頭

然后我們把http模塊導(dǎo)入進(jìn)來之后就可以寫請(qǐng)求函數(shù)然后發(fā)請(qǐng)求了拯田,但是历造,但是, 但是船庇。重要的事情說三遍吭产,數(shù)據(jù)并沒有回來,就這樣糾結(jié)了好久鸭轮,后來發(fā)現(xiàn)網(wǎng)易把數(shù)據(jù)加密了臣淤,這樣我們就需要解密。這時(shí)發(fā)現(xiàn)正確的請(qǐng)求頭下面有兩個(gè)參數(shù)

請(qǐng)求頭下面的兩個(gè)可疑參數(shù)

對(duì)窃爷,你沒有看錯(cuò)荒典,就是這個(gè)坑,他就是秘鑰吞鸭。

有了秘鑰我們就可以用它來解密了寺董,我們把它拷貝到我們自己定義的對(duì)象中并格式化成url參數(shù)形式,然后傳入請(qǐng)求函數(shù)就好了

我們定義的自己的秘鑰參數(shù)

下面開始寫請(qǐng)求函數(shù)了刻剥,我們這里傳入三個(gè)參數(shù)遮咖,第一個(gè)是歌曲的ID(songID),第二個(gè)是我們上面定義的請(qǐng)求頭(option)造虏,第三個(gè)是我們上面定義的秘鑰(postData)御吞。

核心函數(shù),數(shù)據(jù)請(qǐng)求函數(shù)

其中的printInfo是向控制臺(tái)輸出相關(guān)信息漓藕。writeFile是將數(shù)據(jù)寫入我們本地的文件中陶珠。

然后我們執(zhí)行這個(gè)函數(shù) ,就可以在控制臺(tái)看到數(shù)據(jù)了享钞,程序執(zhí)行結(jié)束后會(huì)看到生成了一個(gè)data.json文件揍诽,這里面存儲(chǔ)的就是我們請(qǐng)求回來的數(shù)據(jù)。

但是只抓取一首歌曲怎么夠,最后我們?cè)賹懸粋€(gè)循環(huán)暑脆,用來獲取其他歌曲的評(píng)論信息渠啤。

主入口函數(shù)

這里我們從ID號(hào)為2080326開始,循環(huán)請(qǐng)求了100個(gè)ID號(hào)添吗,也就是說我們想抓取100首歌的評(píng)論信息沥曹。但是結(jié)果是這樣的。

控制臺(tái)輸出的信息

可以看到碟联,只抓到了21首歌曲的信息妓美,我們明明循環(huán)了100次啊,這是怎么回事鲤孵?經(jīng)過分析部脚,原因有2種。

? ? 1.我們?cè)谏厦娴拇a中寫道if(resData.total == 0) return;這樣的話那些沒有評(píng)論的歌曲就被我們忽略了裤纹。

? ? 2.歌曲的ID號(hào)并不是連續(xù)的,也就是說這100個(gè)ID里有很多是空的丧没,并沒對(duì)應(yīng)到任何歌曲鹰椒。我們隨便找一個(gè)該區(qū)間內(nèi)沒有打印出來的ID號(hào)試一下(我試的是http://music.163.com/#/song?id=2080412),結(jié)果真的沒有相應(yīng)歌曲呕童。但是歌曲到底是怎么分配ID號(hào)的漆际,我是真不知道,估計(jì)只有網(wǎng)易云的人才知道吧夺饲。

我們?cè)倏纯瓷傻膁ata.json文件里的內(nèi)容對(duì)不對(duì)奸汇,打開之后先格式化然后直接拉到最后,如下圖:

生成的data,json文件中的數(shù)據(jù)/

可以看到也是21首往声,并且ID號(hào)也是相同的擂找。

至此大功告成。

注意:?

1. 網(wǎng)易云音樂的歌曲ID并不是連續(xù)的浩销,具體ID號(hào)是怎么的排列我也不知道贯涎。大家不要太貪心,玩玩就好慢洋,不要使勁得抓人家的數(shù)據(jù)塘雳,否則網(wǎng)易把你的號(hào)給封了就尷尬了。

2. 我用的node環(huán)境是6.10.0版普筹,建議用最新的穩(wěn)定版本败明。也可以和我保持同步。win平臺(tái)上安裝:官方下載后直接傻瓜式“下一步”就好了太防。如果你裝了nvm的話可以在線安裝不同版本妻顶,nvm可以很方便在各個(gè)版本中切換,具體怎么安裝、使用nvm可以在網(wǎng)上找資料盈包,也可以找我探討沸呐。

3. 代碼中用到了部分ES6的語法,只是用到了幾個(gè)基礎(chǔ)的node 自帶包呢燥。其他的我也不會(huì)崭添。

4. 代碼托管到github。https://github.com/havenxie/webcrawler-neteast-music ?請(qǐng)不要用來干壞事叛氨。

5. 使用方式見github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呼渣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寞埠,更是在濱河造成了極大的恐慌屁置,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仁连,死亡現(xiàn)場(chǎng)離奇詭異蓝角,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)饭冬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門使鹅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昌抠,你說我怎么就攤上這事患朱。” “怎么了炊苫?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵裁厅,是天一觀的道長。 經(jīng)常有香客問我侨艾,道長执虹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任唠梨,我火速辦了婚禮声畏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姻成。我一直安慰自己插龄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布科展。 她就那樣靜靜地躺著均牢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪才睹。 梳的紋絲不亂的頭發(fā)上徘跪,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天甘邀,我揣著相機(jī)與錄音,去河邊找鬼垮庐。 笑死松邪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哨查。 我是一名探鬼主播逗抑,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寒亥!你這毒婦竟也來了邮府?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤溉奕,失蹤者是張志新(化名)和其女友劉穎褂傀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體加勤,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仙辟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鳄梅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叠国。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卫枝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讹挎,我是刑警寧澤校赤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站筒溃,受9級(jí)特大地震影響马篮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜怜奖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一浑测、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歪玲,春花似錦迁央、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钙皮,卻和暖如春蜂科,著一層夾襖步出監(jiān)牢的瞬間顽决,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工导匣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留才菠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓贡定,卻偏偏與公主長得像赋访,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厕氨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,161評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理进每,服務(wù)發(fā)現(xiàn),斷路器命斧,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫田晚、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 成功的路上沒有人會(huì)叫你起床国葬,也沒有人為你買單贤徒,你需要自我管理,自我約束汇四,自我突破接奈,人都是被逼出來的,人的潛能無限通孽,...
    wanghaokang閱讀 220評(píng)論 0 0
  • 我認(rèn)識(shí)一個(gè)姑娘序宦,一個(gè)善良的傻姑娘。 我在大學(xué)里面認(rèn)識(shí)她背苦,準(zhǔn)確來說互捌,是在大學(xué)校園的路上認(rèn)識(shí)她。 她一手提著剛?cè)〉目爝f...
    樊小聰明閱讀 293評(píng)論 0 2