Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

一、前言

昨天打開網易雲音樂被這條視頻刷屏了⬇️

1600萬+的播放量,1.3萬+的評論


Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

那麼今天我們用python看看這些評論裡留下了哪些感人的故事,

二、數據抓取

首先,我們用電腦打開網易雲音樂這條視頻的鏈接。找到最新評論,目標就是把這些評論全部取出來。接著發現每點擊“下一頁”,網站的url並沒有任何變化,說明整個評論區的內容都是通過Ajax異步請求技術得到的。關於這個概念大家可以百度,簡單來說就是能夠實現在後臺與服務器交換數據,在不重新加載頁面的情況下更新網頁。打開瀏覽器F12,進入開發者工具,選擇Network,我們選擇XHR(XmlHttpRequest)就可以選出Ajax的請求包:

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

然後再一個個點進去查看response,就能找到包含評論的數據包⬇️

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

點進去就能看到header信息

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

可以發現是一個post請求並且接收兩個參數params以及encSecKey

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

我們先來試試看

<code>import requests
import json

url = 'https://music.163.com/weapi/v1/resource/comments/R_VI_62_3F79C7B87510106B8118EE3F811C1BC5?csrf_token='

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':'https://music.163.com/video?id=3F79C7B87510106B8118EE3F811C1BC5&userid=265996751',
   'Origin':'http://music.163.com',
   'Host':'music.163.com'
}
user_data = {
   'params': 'fphfDEFeIs3I+ybqkBQhWxvB8GFOB0RMrmOS1VfB9ljX0CWccYd5WPdfRk6iaPuhllQcpKweUTwKc7GyZZENbB99O3C/vdhEeChuxLK8Rl40hb/ipmhXIxbJ1KRMemNFF+jTQqdFUnw3HNdrUqSzjmfh/HP630vmp4HVL6i+oSDygse0C1JUgS5d5Six93R7r8b3tKUCnPw/JJbH3AXTlA==',

   'encSecKey': 'a658168c2225f0dfe46e9b260abb348691c42946ec46e6f4a5c434e86d6d546da0fcb7de0dba750422c40064b026169a453f5e42c59f63c38c7749c0e81023dd27978f1e5d97b6c97fa70df347737b51a69fc15b49b2e3e209c53eefcf7d795b6344404811e84761c700422ef57a427e84bc77adece15146ca62033b3f2aacfd'
}

response = requests.post(url,headers=headers,data=user_data)/<code>
Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!


可以發現能夠取到這一頁的評論信息

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

但是這隻能拿到當前這一頁的評論。那麼怎樣獲取全部的評論信息呢,之前我們說過,點擊下一頁的時候只刷新評論,而不會重新加載頁面。通過測試我們發現點擊下一頁時候只有 params和encSecKey會改變,那麼接下來的問題就是就是搞明白這兩個參數是怎樣變化的。還好已經有知乎大神[1]給出了加密過程的解析與還原代碼,所以我們直接拿過來用就可以。整個過程比較複雜,每個參數經過兩次加密涉及到四個不同參數。由於篇幅原因完整的代碼可以在早起python公眾號內回覆音樂獲取。那麼最後是將所有評論全部爬取下來。

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

三、數據分析

先來看下熱評都在說什麼

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

​ 那有什麼白衣天使,只不過是一群孩子穿上白衣服,學著前輩的樣子治病救人罷了!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

​聽到那句“媽媽在打怪獸呢”眼淚就掉下來了

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

​ 武漢只是暫時被病毒藏起來!武漢加油

再來看下出現最多的詞彙

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

毫無疑問是加油、武漢加油、中國加油出現的次數最多。最後製作詞雲圖看下

<code>from wordcloud import WordCloud
import matplotlib.pyplot as plt #繪製圖像的模塊
import  jieba #jieba分詞

path_txt='music.txt'
f = open(path_txt,'r',encoding='UTF-8').read()

# 結巴分詞,生成字符串,wordcloud無法直接生成正確的中文詞雲
cut_text = " ".join(jieba.cut(f))

wordcloud = WordCloud(
   #設置字體,不然會出現口字亂碼,文字的路徑是電腦的字體一般路徑,可以換成別的
   font_path="msyh.ttc",
   #設置了背景,寬高
   background_color="black",width=2000,height=880).generate(cut_text)

plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()/<code>
Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

最終生成的詞雲圖⬇️可以看到:武漢加油!中國加油!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!

Python爬取網易雲音樂1萬條評論,感受到疫情下的真情!


分享到:


相關文章: