爬取了陳奕迅新歌《咱們》10萬條評論數據發現:原來,有些人只適合碰見

最近就有一部「懷舊」題材的電影,未播先火,那就是劉若英的處女做——《後來的咱們》。青春,愛情,夢想,一直是「懷舊」題材的核心要素,雖然電影如今還未上映,但先行發佈的主題曲《咱們》,已經虐哭了很多人。在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、後記

曾記得,郭敬明在書裏寫,「咱們太年輕,以至於都不知道之後的時光,居然那麼長,

長得足夠讓我忘記你,足夠讓我從新喜歡一我的,就像當初喜歡你那樣。」

咱們這一輩子,老是遇到太多的後來。從不懂愛到懂愛,從擁有到珍惜。

所幸是到了最後,不管過了多少年。後來的咱們,都在對方身上,學會了如何去愛。

輸入圖片說明

就像陳奕迅在歌裏唱的,「有過執着,放下執着」。有些人啊,光是碰見就已經值得了。

咱們確實沒有了後來。

就讓後來的咱們,慢慢走,別回頭。

不談虧欠,感謝碰見。

只是在下一次碰見愛的時候,咱們都要學會更懂得珍惜。

這纔是愛的意義,也是咱們爲何去愛。

相關文章
相關標籤/搜索