簡單的網易雲音樂熱門評論爬蟲
阿新 • • 發佈:2018-08-11
新手練習 all pymongo code rmi success 技術 ftime 加密算
簡單的網易雲音樂熱門評論爬蟲
註:本文沒有什麽技術含量,就是一個普通的AJAX數據爬蟲,適合新手練習
目標:爬取網易雲音樂歌曲的熱門評論
分析:本次爬蟲不難,思路是請求和獲取數據,網易雲音樂的評論是通過AJAX的方式進行加載的,打開chrome進行分析就很容易分析出來,唯一難點是它的傳送數據是加密的,如果不知道加密的方法的話,就無法構造請求。
https://music.163.com/weapi/event/user/permission?csrf_token=
這個就是用瀏覽器打開網易雲音樂時,瀏覽器調用的API,這個API是要用到加密算法的,後面經過搜索,發現了一個更為簡單的API
https://music.163.com/api/v1/resource/comments/R_SO_4_<song_id>
這個API的請求不需要進行加密,可以直接獲取得到歌曲的評論,雖然返回的不是所有評論,但是這次的目標是獲取歌曲的熱門評論,返回的數據中包含有熱門評論,可以實現我們的目標,足夠了。
思路:思路和普通的爬蟲思路一樣,發送請求,獲取數據,分析數據,存取數據
環境:python3.6.3,MongoDB4.0.0
模塊:request,json,pymongo,time,re
代碼:
# -*-coding:utf-8-*- # Author: AnswerW3I # version:3.6.3 import requests import json import time import pymongo import re class Spider(object): def __init__(self, song): self.song_id = song self.song_url = "https://music.163.com/api/v1/resource/comments/R_SO_4_" + self.song_id self.headers = { ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0‘, ‘Referer‘: ‘http://music.163.com‘ } self.client = pymongo.MongoClient(‘localhost‘, port=27017) self.db = self.client.test self.collection = self.db.hotComments self.session = requests.session() self.session = requests.get(self.song_url, headers=self.headers) self._save() def _get_comments(self, json_data): # get the json and find the hotcomments data = json.loads(json_data) for item in data.get("hotComments"): yield { ‘comment‘: item.get("content"), ‘likes‘: item.get("likedCount"), ‘user‘: item.get("user").get("nickname"), ‘date‘: self._get_time(str(item.get("time"))[:10]) } def _get_time(self, timeStamp): timeArray = time.localtime(int(timeStamp)) return time.strftime("%Y-%m-%d", timeArray) def _save(self): for hotComment in self._get_comments(self.session.text): self.collection.insert(hotComment) print("save successfully") def main(): song_url = input("Song_Url:") a = re.compile(‘id=\d+‘) song_id = a.findall(song_url)[0].replace(‘id=‘,‘‘) print(song_id) if __name__ == "__main__": main()
運行效果:嘗試爬取周傑倫的《晴天》
總結:內容沒有什麽技術含量,和普通的爬蟲思路一樣,不過這個Demo是爬取單首歌曲的,如果爬取歌曲過多,可能要做個代理池防止IP被封。
簡單的網易雲音樂熱門評論爬蟲