Python爬取網易雲音樂1萬條評論

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:劉早起早起 早起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()

最終生成的詞雲圖⬇️可以看到:武漢加油!中國加油!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章