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