爬取網易雲音樂某一我的的評論

需求來源

上週六的時候和一朋友聊天,聊到網易雲系列產品,不知不覺就說到了網易雲音樂,我說了些產品細節的問題,好比說,爲何在我不開通會員的狀況下,網易雲音樂不容許我紅心一個會員歌曲,沒有購買 沒有聽歌的權利這是正常,但連點擊喜歡的權利都沒有卻讓我非常鬱悶,在後面,我爲此功能特地下載蝦米音樂,發現蝦米倒是能夠紅心收費歌曲的,他一臉吃瓜相的看着我說,這種細節功能你都計較啊,而後說出了他本身對網易雲音樂的不滿,說到了爲何網易雲音樂不能看本身或他人的我的評論,我看着他說,這功能哪有人用啊,再說,我要是真的想知道,我能夠將這我的的評論爬出來的。這句話說完我就知道要出事情了,果不其然,我那朋友非要我幫他爬取下本身的我的評論,但是那一刻我在內心想,我怎麼知道他評論了哪些歌呢?php

而後在回去的路上,我一直在想這件事情,能夠經過爬取這我的聽過的歌的全部評論,而後找到這我的的評論,而後一直就陷入了一個死循環,我怎麼獲取這我的聽過的歌曲呢,彷佛是沒有辦法的。laravel

思路轉換

沒有辦法了,因而換了個思路去思考這個問題,爲何會評論一首歌曲呢,若是是我,我會怎麼作,想了好久,我想只有本身比較喜歡的歌曲纔會去評論的,因而想何不把這我的的喜歡的全部歌曲中的評論爬下來呢,索性擴大了範圍,將這我的的全部我的歌單的歌曲的評論爬下來,而後將屬於這我的的評論保存下來。git

具體實踐

接口分析

思路想好了,就去作,首先確定是分析接口,結果卻發現接口發生了變化,以前的接口是不進行加密的,如今的接口每次的請求都帶上了 encSecKey 和 params 參數,顯然是加密了,因而在 Github 上發現了這個,網易雲音樂新版WebAPI分析,是 Python 實現的,重要的部分是 aesEncryptrsaEncrypt 兩個加密的部分,完成這部分以後呢,後續工做就簡單的多了。github

實踐方案

考慮到用戶歌單歌曲數量比較多的狀況,在爬取歌曲評論的過程當中,開啓多進程爬取是必要的,但又考慮到機器性能的緣由,隊列執行爬取功能也是必須的,否則機器可能在進程爆滿的狀況效率各方面實在是堪憂啊。redis

爲了考慮之後其它新功能的開發,在此採用了 Laravel5.4 + PHP7.1 環境下的開發,須要安裝php擴展bcmath, 一方面是 Laravel 開發的效率,另外一方面 Laravel 在我提到的幾個問題上面都有相應的解決方案,數據的爬取則是採用了 Laravelartisan 命令行,對於多進程則是採用了進程控制擴展 PCNTL,但同時這個多進程爬取的過程則是放到了 redis 驅動下的隊列中,同時使用了 Supervisor 進行隊列的監控,整個代碼我已經開放到 Github
clone 下來後配置完成後執行:微信

php artisan netease:playlist 123456 性能

將123456替換成網易雲音樂用戶的 id,等待結束後,表 user_comments 就能看到用戶的評論了。
具體操做能夠查看 README.md 感興趣的同窗能夠試着玩一玩,若是不是開發人員,能夠私信我來爬取後再發給你,後續我會開發出線上的功能供你們使用。加密

這裏我只是提供了個思路,有須要請自行爬取,有問題能夠聯繫我。微信(w1113241948)
相關文章
相關標籤/搜索