一、前言
昨天打開網易雲音樂被這條視頻刷屏了⬇️
1600萬+的播放量,1.3萬+的評論
那麼今天我們用python看看這些評論裡留下了哪些感人的故事,
二、數據抓取
首先,我們用電腦打開網易雲音樂這條視頻的鏈接。找到最新評論,目標就是把這些評論全部取出來。接著發現每點擊“下一頁”,網站的url並沒有任何變化,說明整個評論區的內容都是通過Ajax異步請求技術得到的。關於這個概念大家可以百度,簡單來說就是能夠實現在後臺與服務器交換數據,在不重新加載頁面的情況下更新網頁。打開瀏覽器F12,進入開發者工具,選擇Network,我們選擇XHR(XmlHttpRequest)就可以選出Ajax的請求包:
然後再一個個點進去查看response,就能找到包含評論的數據包⬇️
點進去就能看到header信息
可以發現是一個post請求並且接收兩個參數params以及encSecKey
我們先來試試看
<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>
可以發現能夠取到這一頁的評論信息
但是這隻能拿到當前這一頁的評論。那麼怎樣獲取全部的評論信息呢,之前我們說過,點擊下一頁的時候只刷新評論,而不會重新加載頁面。通過測試我們發現點擊下一頁時候只有 params和encSecKey會改變,那麼接下來的問題就是就是搞明白這兩個參數是怎樣變化的。還好已經有知乎大神[1]給出了加密過程的解析與還原代碼,所以我們直接拿過來用就可以。整個過程比較複雜,每個參數經過兩次加密涉及到四個不同參數。由於篇幅原因完整的代碼可以在早起python公眾號內回覆音樂獲取。那麼最後是將所有評論全部爬取下來。
三、數據分析
先來看下熱評都在說什麼
那有什麼白衣天使,只不過是一群孩子穿上白衣服,學著前輩的樣子治病救人罷了!
聽到那句“媽媽在打怪獸呢”眼淚就掉下來了
武漢只是暫時被病毒藏起來!武漢加油
再來看下出現最多的詞彙
毫無疑問是加油、武漢加油、中國加油出現的次數最多。最後製作詞雲圖看下
<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>
最終生成的詞雲圖⬇️可以看到:武漢加油!中國加油!
閱讀更多 地表嘴強程序員 的文章