最近就有一部「懷舊」題材的電影,未播先火,那就是劉若英的處女做——《後來的咱們》。青春,愛情,夢想,一直是「懷舊」題材的核心要素,雖然電影如今還未上映,但先行發佈的主題曲《咱們》,已經虐哭了很多人。在MV裏,歌聲清清淺淺,訴說着那些年關於愛情裏的遺憾。html
「我最大的遺憾,就是你的遺憾,與我有關」,下面就一塊兒來感覺一下吧。算法
https://y.qq.com/n/yqq/song/002Ce1kE4crzRK.htmljson
這首歌是《後來的咱們》中的主題曲,網易雲音樂上線當天便席捲千萬+播放量,現現在光是網易雲上面的評論就立刻突破了10萬條。api
網易雲音樂一直是我向往的「神壇「,聽音樂看到走心的評論的那一刻,高山流水。因而今天練習Python來抓取一下歌曲的熱門評論。並作成圖表、詞雲來展現,看看相對於這首歌最讓人有感覺的評論內容是什麼。瀏覽器
1、抓數據服務器
要想作成詞雲圖表,首先得有數據才行。因而須要一點點的爬蟲技巧。app
基本思路爲:抓包分析、加密信息處理、抓取熱門評論信息echarts
1.抓包分析post
咱們首先用瀏覽器打開網易雲音樂的網頁版,進入陳奕迅《咱們》歌曲頁面,能夠看到下面有評論。接着F12進入開發者控制檯(審查元素)。測試
接下來就要作的是,找到歌曲評論對應的url,並分析驗證其數據跟網頁現實的數據是否吻合,步驟以下圖:
經過歌曲id輕鬆找到評論所在的連接
查看hreaders的信息,發現瀏覽器使用的是POST的方式進行的請求
具體字段如上圖,會發現表單中須要填兩個數據,名稱爲params和encSecKey。後面緊跟的是一大串字符,換幾首歌會發現,每首歌的params和encSecKey都是不同的,所以,這兩個數據可能通過一個特定的算法進行加密過的
服務器返回的和評論相關的數據爲json格式的,裏面含有很是豐富的信息(好比有關評論者的信息,評論日期,點贊數,評論內容等等),其中hotComments就是咱們要找的熱門評論,總共15條
那咱們的思路就很清晰了,只須要分析這個api並模擬發送請求,獲取json進行解析就行了。
2.加密信息處理
而後通過個人測試,直接把瀏覽器上這倆數據拿過來就能夠。可是要想真正的解決這個加密處理,還須要有點加解密的只是存儲。關於這兩個參數如何解密,強大的知乎上其實已經有答案的了,感興趣的朋友能夠進去看一下
如何爬網易雲音樂的評論數?(https://www.zhihu.com/question/36081767)
咱們在這裏就只須要用咱們這種偷懶的辦法就能夠完成需求了。這裏我就使用這麼個臨時的方法好了,並且對於不一樣的歌曲是能夠重用的,待會咱們能夠驗證一下。
3.抓取熱門評論信息
代碼塊以下:
import requests import json url = 'http://music.163.com/weapi/v1/resource/comments/R_SO_4_551816010?csrf_token=568cec564ccadb5f1b29311ece2288f1' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36', 'Referer':'http://music.163.com/song?id=551816010', 'Origin':'http://music.163.com', 'Host':'music.163.com' } #加密數據,直接拿過來用 user_data = { 'params': 'vRlMDmFsdQgApSPW3Fuh93jGTi/ZN2hZ2MhdqMB503TZaIWYWujKWM4hAJnKoPdV7vMXi5GZX6iOa1aljfQwxnKsNT+5/uJKuxosmdhdBQxvX/uwXSOVdT+0RFcnSPtv', 'encSecKey': '46fddcef9ca665289ff5a8888aa2d3b0490e94ccffe48332eca2d2a775ee932624afea7e95f321d8565fd9101a8fbc5a9cadbe07daa61a27d18e4eb214ff83ad301255722b154f3c1dd1364570c60e3f003e15515de7c6ede0ca6ca255e8e39788c2f72877f64bc68d29fac51d33103c181cad6b0a297fe13cd55aa67333e3e5' } response = requests.post(url,headers=headers,data=user_data) data = json.loads(response.text) hotcomments = [] for hotcommment in data['hotComments']: item = { 'nickname':hotcommment['user']['nickname'], 'content':hotcommment['content'], 'likedCount':hotcommment['likedCount'] } hotcomments.append(item) #獲取評論用戶名,內容,以及對應的獲贊數 content_list = [content['content'] for content in hotcomments] nickname = [content['nickname'] for content in hotcomments] liked_count = [content['likedCount'] for content in hotcomments]
2、數據可視化
在得到相關評論數據後,咱們將其作成圖表與詞雲圖,將讓人看起來更直觀。
接下來須要在本身電腦上安裝須要相關的安裝包: pyecharts(圖表包)、matplotlib(繪圖功能包)、 WordCloud(詞雲包)
其中,pyecharts 是一個用於生成 Echarts 圖表的類庫。 Echarts 是百度開源的一個數據可視化 JS 庫,主要用於數據可視化,同時pyecharts 兼容 Python2 和 Python3。安裝很是簡單,只需:
pip install pyecharts
接下來就是代碼的實現,利用以前得到評論用戶名和對應的點贊數,將其製做成圖表圖:
from pyecharts import Bar bar = Bar("熱評中點贊數示例圖") bar.add( "點贊數",nickname, liked_count, is_stack=True,mark_line=["min", "max"],mark_point=["average"]) bar.render()
由此能夠看出,得到最高贊數(95056)評論是:
@魚大叔Uncle:後來的我,離開了他,永遠的離開了他,十年的感情不過寥寥幾句話。後來的我,嫁給了一個很普通的人,沒有他的浪漫,卻有不同的溫暖。
大多數贊數爲20000-30000之間,最低都達到7000+,(基本與網頁裏評論中數據吻合)。
最後,咱們將全部的熱門評論內容,製做成詞雲圖展現出來,代碼塊以下:
from wordcloud import WordCloud import matplotlib.pyplot as plt content_text = " ".join(content_list) wordcloud = WordCloud(font_path=r"C:\simhei.ttf",max_words=200).generate(content_text) plt.figure() plt.imshow(wordcloud,interpolation='bilinear') plt.axis('off') plt.show()
結果圖:
從圖中能夠看出,不少人感慨,後來只有你我,再無咱們。
註明:全部數據,是屬於當時所爬取的數據。
3、後記
曾記得,郭敬明在書裏寫,「咱們太年輕,以至於都不知道之後的時光,居然那麼長,
長得足夠讓我忘記你,足夠讓我從新喜歡一我的,就像當初喜歡你那樣。」
咱們這一輩子,老是遇到太多的後來。從不懂愛到懂愛,從擁有到珍惜。
所幸是到了最後,不管過了多少年。後來的咱們,都在對方身上,學會了如何去愛。
就像陳奕迅在歌裏唱的,「有過執着,放下執着」。有些人啊,光是碰見就已經值得了。
咱們確實沒有了後來。
就讓後來的咱們,慢慢走,別回頭。
不談虧欠,感謝碰見。
只是在下一次碰見愛的時候,咱們都要學會更懂得珍惜。
這纔是愛的意義,也是咱們爲何去愛。