我分析了10萬條陳奕迅新歌《我們》的熱門評(píng)論,竟發(fā)現(xiàn)這么一個(gè)秘密
最近有一部“懷舊”題材的電影,未播先火,那就是劉若英的處女作——《后來的我們》。
青春,愛情,夢(mèng)想,一直是“懷舊”題材的核心要素,雖然電影現(xiàn)在還未上映,但先行發(fā)布的主題曲《我們》,已經(jīng)虐哭了不少人。在 MV 里,歌聲清清淺淺,訴說著那些年關(guān)于愛情里的遺憾。
“我最大的遺憾,就是你的遺憾,與我有關(guān)”,下面就一起來感受一下吧。
這首歌是《后來的我們》中的主題曲,網(wǎng)易云音樂上線當(dāng)天便席卷千萬+播放量,現(xiàn)如今光是網(wǎng)易云上面的評(píng)論就馬上突破了 10 萬條。
網(wǎng)易云音樂一直是我們向往的“神壇“,聽音樂看到走心的評(píng)論的那一刻,高山流水遇知音。
于是本文作者抓取了這首歌曲的熱門評(píng)論,并做成圖表、詞云來展示,看看相對(duì)于這首歌最讓人有感受的評(píng)論內(nèi)容是什么。
抓數(shù)據(jù)
要想做成詞云圖表,首先得有數(shù)據(jù)才行,這里需要一點(diǎn)點(diǎn)的爬蟲技巧。
基本思路為:
- 抓包分析
- 加密信息處理
- 抓取熱門評(píng)論信息
抓包分析
我們首先用瀏覽器打開網(wǎng)易云音樂的網(wǎng)頁版,進(jìn)入陳奕迅《我們》歌曲頁面,可以看到下面有評(píng)論。接著 F12 進(jìn)入開發(fā)者控制臺(tái)(審查元素)。
下面要做的是,找到歌曲評(píng)論對(duì)應(yīng)的 url,并分析驗(yàn)證其數(shù)據(jù)跟網(wǎng)頁現(xiàn)實(shí)的數(shù)據(jù)是否吻合,步驟如下圖:
通過歌曲 id 輕松找到評(píng)論所在的鏈接
查看 hreaders 的信息,發(fā)現(xiàn)瀏覽器使用的是 POST 的方式進(jìn)行的請(qǐng)求
具體字段如上圖,會(huì)發(fā)現(xiàn)表單中需要填兩個(gè)數(shù)據(jù),名稱為 params 和 encSecKey。
后面緊跟的是一大串字符,換幾首歌會(huì)發(fā)現(xiàn),每首歌的 params 和 encSecKey 都是不一樣的。因此,這兩個(gè)數(shù)據(jù)可能是經(jīng)過一個(gè)特定的算法進(jìn)行加密過的。
服務(wù)器返回的和評(píng)論相關(guān)的數(shù)據(jù)為 json 格式,里面含有非常豐富的信息(比如有關(guān)評(píng)論者的信息,評(píng)論日期,點(diǎn)贊數(shù),評(píng)論內(nèi)容等等),其中 hotComments 就是我們要找的熱門評(píng)論,總共 15 條。
那我們的思路就很清晰了,只需要分析這個(gè) api 并模擬發(fā)送請(qǐng)求,獲取 json 進(jìn)行解析就好了。
加密信息處理
經(jīng)過我的測(cè)試,直接把瀏覽器上這倆數(shù)據(jù)拿過來就可以。但是要想真正的解決這個(gè)加密處理,還需要有點(diǎn)加解密的只是存儲(chǔ)。
關(guān)于這兩個(gè)參數(shù)如何解密,強(qiáng)大的知乎上其實(shí)已經(jīng)有了答案的,感興趣的朋友可以進(jìn)去看一下:《如何爬網(wǎng)易云音樂的評(píng)論數(shù)?》https://www.zhihu.com/question/36081767
我們?cè)谶@里就只需要用我們這種偷懶的辦法就可以完成需求了。這里我就使用這么個(gè)臨時(shí)的方法好了,而且對(duì)于不同的歌曲是可以重用的,待會(huì)我們可以驗(yàn)證一下。
抓取熱門評(píng)論信息
代碼塊如下:
- 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'
- }
- #加密數(shù)據(jù),直接拿過來用
- 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)
- #獲取評(píng)論用戶名,內(nèi)容,以及對(duì)應(yīng)的獲贊數(shù)
- content_list = [content['content'] for content in hotcomments]
- nickname = [content['nickname'] for content in hotcomments]
- liked_count = [content['likedCount'] for content in hotcomments]
數(shù)據(jù)可視化
在獲得相關(guān)評(píng)論數(shù)據(jù)后,我們將其做成圖表與詞云圖,將讓人看起來更直觀。
接下來需要在自己電腦上安裝需要的安裝包: pyecharts(圖表包)、matplotlib(繪圖功能包)、 WordCloud(詞云包)。其中,pyecharts 是一個(gè)用于生成 Echarts 圖表的類庫。
Echarts 是百度開源的一個(gè)數(shù)據(jù)可視化 JS 庫,主要用于數(shù)據(jù)可視化,同時(shí) pyecharts 兼容 Python2 和 Python3。
安裝非常簡(jiǎn)單,只需:
- pip install pyecharts
關(guān)于 WordCloud(詞云包)安裝過程中會(huì)出現(xiàn)的一些問題,我這里總結(jié)了一下分享給大家。
看到別人使用 WordCloud 可以方便地生成云詞圖,在數(shù)據(jù)可視化的方面會(huì)給我們帶來很多便利。然而實(shí)際操作起來才發(fā)現(xiàn),初學(xué)者還是容易遇到很多坑。
說明:已安裝(Python 3.6.1)、系統(tǒng)為Windows 7
安裝文件的獲取
首先,按 win+r,輸入 cmd,如下圖:
然后,輸入如下代碼:
- pip install wordcloud
結(jié)果呢?會(huì)報(bào)錯(cuò)的,會(huì)有文件缺失的問題。這一點(diǎn)不少人都有類似反饋。
于是在官網(wǎng),看到這么一張圖,靈機(jī)一動(dòng):
解決方案:在 Github 下載 WordCloud 的包,解壓縮后,在對(duì)應(yīng)目錄下用 python setup.py install 安裝。
操作如下圖,進(jìn)入剛才解壓后的文件夾中,同時(shí)按住 shift+ 鼠標(biāo)右鍵,啟動(dòng) cmd。
安裝 WordCloud 時(shí)出現(xiàn)報(bào)錯(cuò)信息:error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools
這種情況下,直接跟著提示內(nèi)容進(jìn)行就好。
解決方案:打開報(bào)錯(cuò)提示中的鏈接,下載并安裝 Visual C++ 2015 Build Tools。
安裝完 WordCloud 后,接下來就是代碼的實(shí)現(xiàn),利用之前獲得評(píng)論用戶名和對(duì)應(yīng)的點(diǎn)贊數(shù),將其制作成圖表圖:
- from pyecharts import Bar
- bar = Bar("熱評(píng)中點(diǎn)贊數(shù)示例圖")
- bar.add( "點(diǎn)贊數(shù)",nickname, liked_count, is_stack=True,mark_line=["min", "max"],mark_point=["average"])
- bar.render()
由此可以看出,獲得最高贊數(shù)(95056)評(píng)論的是:
@魚大叔Uncle:后來的我,離開了他,永遠(yuǎn)的離開了他,十年的感情不過寥寥幾句話。后來的我,嫁給了一個(gè)很普通的人,沒有他的浪漫,卻有不一樣的溫暖。
大多數(shù)贊數(shù)為 20000-30000 之間,最低都達(dá)到 7000+,(基本與網(wǎng)頁里評(píng)論中數(shù)據(jù)吻合)。
最后,我們將所有的熱門評(píng)論內(nèi)容,制作成詞云圖展示出來,代碼塊如下:
- 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()
詞云分析結(jié)果圖如下:
從圖中可以看出,很多人感慨,后來只有你我,再無我們。(注明:所有數(shù)據(jù),是屬于當(dāng)時(shí)所爬取的數(shù)據(jù))
后記
曾記得,郭敬明在書里寫,“我們太年輕,以致于都不知道以后的時(shí)光,竟然那么長(zhǎng),長(zhǎng)得足夠讓我忘記你,足夠讓我重新喜歡一個(gè)人,就像當(dāng)初喜歡你那樣。”
我們這一生,總是遇到太多的后來。從不懂愛到懂愛,從擁有到珍惜。
所幸是到了最后,無論過了多少年。后來的我們,都在對(duì)方身上,學(xué)會(huì)了如何去愛。
就像陳奕迅在歌里唱的,“有過執(zhí)著,放下執(zhí)著”。有些人啊,光是遇見就已經(jīng)值得了。
我們確實(shí)沒有了后來。
就讓后來的我們,慢慢走,別回頭。
不談虧欠,感謝遇見。
只是在下一次遇見愛的時(shí)候,我們都要學(xué)會(huì)更懂得珍惜。
這才是愛的意義,也是我們?yōu)槭裁慈邸?/p>