網易雲音樂評論&評論者信息爬取

網易雲音樂評論&評論者信息爬取

-----老中醫不看病

<太陽底下沒有新鮮事>

歌曲:《都是夜歸人》 歌手:許靜美

作曲:陳佳明 作詞:陳佳明

時長:05:00 評論數:10452

爬取原因:極限挑戰第四季第十期插曲,好聽。

Step 1 評論&評論者信息爬取及存儲

1) 分析網頁(URL==music.163.com/#):

查找「XHR」——>找到「R_SO_4_306967?.......」——>「Headers」中,拉到最後,找到「Form Data」,顯示如下:

發現信息異常,猜測應該是加密了。

採用文章blog.csdn.net/cy7767195中的方法,

進行網址拼接,

music.163.com/api/v1/re

其中「limit=」後的數字為每個網址顯示評論數;「offset=」後的數字為評論偏移量,從0開始,每次增加量與「limit=」後的數字相同。

需要爬取的內容都在json里,如下:

裡面包含評論內容(content)、點贊數(likedcount)、評論時間(time)、評論者名字(nickname)、評論者數字ID(userId)等等,如下:

通過評論者數字ID,構造評論者網址(music.163.com/user/home?),(注意一定要去掉中間的#號,要不然源網頁沒有要摘取的信息)。評論者源網頁包含動態數、關注數、粉絲數、所在地區、累積聽歌數等等,如下:

2) 資料庫欄位設置

(注意:評論存在emoji表情,佔四個位元組,需要設置為utf8mb4)

3) 爬蟲程序

from bs4 import BeautifulSoupimport pymysqlimport requestsimport jsonfrom multiprocessing import Poolimport datetime#連接資料庫connect = pymysql.connect( user=root, password=, host=127.0.0.1, db=test, port=3306, charset=(utf8mb4), use_unicode=True )cursor = connect.cursor()#信息爬取def get_info(i): i *= 20 header = { User-Agent: 填寫自己瀏覽器內容, Cookie:填寫自己瀏覽器內容} url = http://music.163.com/api/v1/resource/comments/R_SO_4_306967?limit=20&offset=%s % i request = requests.Session() request.keep_alive = False response = request.get(url=url, headers=header, timeout=10) result = json.loads(response.text) for j in range(20): userID = result[comments][j][user][userId] name = result[comments][j][user][nickname] comment = result[comments][j][content].replace(
, ) like_count = result[comments][j][likedCount] time = int(str(result[comments][j][time])[:-3]) dateArray = datetime.datetime.utcfromtimestamp(time) time = dateArray.strftime("%Y-%m-%d %H:%M:%S") URL = https://music.163.com/user/home?id=%s % userID html = requests.get(url=URL, headers=header).text Soup = BeautifulSoup(html, lxml) event_count = int(Soup.find_all(strong,id=event_count)[0].string) follow_count = int(Soup.find_all(strong, id=follow_count)[0].string) fan_count = int(Soup.find_all(strong,id=fan_count)[0].string) location = Soup.find_all(div, class_=inf s-fc3)[0].get_text().replace(所在地區:, ).replace(年齡:, ).replace(
, ).replace(xa0, ) listening_songs_num = int(Soup.find_all(h4)[0].string.replace(累積聽歌, ).replace(, )) data = {userID: userID, name: name, comment: comment, like_count: like_count, time: time, event_count: event_count, follow_count: follow_count, fan_count: fan_count, location: location, listening_songs_num: listening_songs_num} print(data) cursor.execute(insert into doushiyeguiren(userID, name, comment, like_count, time, event_count, follow_count, fan_count, location, listening_songs_num) values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s),[data[userID], data[name], data[comment], data[like_count], data[time], data[event_count], data[follow_count], data[fan_count], data[location], data[listening_songs_num]]) # 提交數據 connect.commit()if __name__ == __main__: pool = Pool(20) # 創建進程池 pool.map(get_info, [i for i in range(522)]) connect.close()

4) 資料庫數據

Step 2 數據分析

1) 詞雲(高頻辭彙)

2) 評論數變化

3) 評論者動態數量

4) 評論者粉絲數量

5) 評論者關注數量

6) 評論點贊數分布

7) 評論者聽歌數

8) 評論者地域分布

9) 浙江區域評論者分布

10) 點贊數TOP10

恭喜「網易UFO丁磊」同誌喜獲點贊數TOP1。現在動動手指,你就是三石同志的第10萬個粉絲。。。。。。(除了第二名,其它都在熱評里,我也不清楚為什麼點贊數第二的這位沒有進熱評,大概這就是命。。。。。。)


推薦閱讀:

網易雲音樂「周杰倫事件」刷屏,版權問題還是互聯網公司「命脈」
RADWIMPS|就是這該死的執著,讓我放不下你
2分鐘告訴你如何在網易雲音樂正常聽周杰倫的歌
今日歌單 | 越美麗的東西我越不可碰

TAG:網易雲音樂 | python爬蟲 | 音樂評論 |