最近發現一首很火的歌,瞬間讓你感覺到濃濃的青春懵懂感,這就是王廣允的《好喜歡你》。說實話,爬這種愛意濃濃的歌曲彷佛不是咱們這種單身XX應有的想法,可是仍是想體會一下那些青春歲月裏的小幸福,話很少說,代碼走起來。html
原本想這裏直接貼上歌曲的連接,可是因爲版權問題,你們能夠去網易雲自行聽取哈。算法
咱們此次爬取的信息主要是評論點贊前十的數據,並據此進行數據可視化操做,生成詞雲。json
1、請求分析api
咱們首先打開網易雲音樂的官網,進入《好喜歡你》的播放頁面,而後按F12或者審查元素獲取控制檯信息。瀏覽器
咱們這裏經過瀏覽器中的歌曲的id來獲取評論的連接,這是一個很是快捷的方式,我以前嘗試過不少的方法,感受都太麻煩了,這個方式簡單,你們之後爬取均可以按照這種方式進行。服務器
接着就是肯定是經過get仍是post的方式來提交數據的,咱們發現Headers裏面顯示是Post方式:cookie
涉及到表單的提交,通常都會附帶敏感信息,例如cookie,因此這裏咱們就須要檢查一下有沒有參數遺漏了:app
咱們在Headers底下發現有一個Rorm Data裏面包含兩個參數params和encSecKey,待會咱們提交的時候須要帶上這兩個參數。若是你爬過相似的網站,你就會猜想這個可能就是標識歌曲信息和我的信息的一個加密數據,實際上這個就是那樣的。本篇並不打算去介紹如何去破解這個加密算法,我打算可能下一篇來介紹一下這個破解過程。echarts
通常爬取的時候,咱們首先會預覽一下數據信息,就控制檯下面的preview,發現服務器返回的數據格式是json,因此咱們等下就須要把數據轉換成json格式:post
看到沒有,這些數據是很是具備規律的,而後就能夠開始書寫代碼了。
一般咱們須要在headers裏面添加一些host,referer,user-agent等,這是防止被網站識別出爬蟲而被限制訪問。
2、代碼書寫
1import requests 2import json 3 4 # 獲取歌曲評論的url 5url = 'https://music.163.com/weapi/v1/resource/comments/R_SO_4_1320098098?csrf_token=cfb7c24b770cd1cad7f7bf6c9bcb6f29' 6 7 # 由於是post提交,採用MD5或者其餘算法加密過,可是咱們能夠直接使用加密後的數據,用於瀏覽器識別身份 8headers = { 9'Host': 'music.163.com', 10'Origin': 'https://music.163.com', 11'Referer': 'https://music.163.com/song?id=1320098098', 12'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)' 13 ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' 14} 15 16User_Data = { 17 'params': 'ilXGpo53YAlLd7+0UutKIXmODpUQWhXl1lvPU2a7Y8vOIsFvIr/Q5QYpaSvXRgMU47q5Aa9gJkmY5KM2jS+l5gaIAzf/OmVy6ud71TFl' 18 'fyELQADIGNGSbW8PNXvNyWvPMjEImTtIxrvoOgFlLF429Tbpd/XAAnh6aQu23+hKxThzLBZhO0jdOLLgNAvm87McNgiaVfCQ+1eYws4kn5i+8jR/P/UPt9wdIM8G8qx1xmw=', 19 'encSecKey': '79c3d0f6664de1758c3ae2c3c7c9dabbb61c2a46b79fa0a8d40a842361c6ddd94d2e21594219bf98b9e4ff124fa3f5046b' 20 '1dfa60f38c35fc5511f1be314ed0bcac69a7867f2870ba01b8af7ee0900a588759b5aad499565aa45e379589a42ba150fa5e' 21 'df4afb0442f063ab212d9eb9376b4ca99f282d9520653fd808176a5e0f' 22} 23 24 # 經過post方式來提交數據 25response = requests.post(url, headers=headers, data= User_Data) 26 27# 轉換成json格式便於後面數據的提取 28data = json.loads(response.text) 29hotcomments = [] 30for hotcomment in data['hotComments']: 31 item ={ 32 'nickname': hotcomment['user']['nickname'], 33 'content': hotcomment['content'], 34 'likedCount': hotcomment['likedCount'] 35 } 36 hotcomments.append(item) 37 38 # 獲取評論的用戶名稱,內容,以及對應的點贊數 39nickname_list = [content['nickname']for content in hotcomments] 40content_list = [content['content']for content in hotcomments] 41likedCount_list = [content['likedCount']for content in hotcomments]
3、數據可視化
這裏我使用了pyecharts這個開源庫,它是百度Echarts對Python的實現,挺好用的。使用它須要安裝一些依賴包,關於pyecharts的安裝我就不介紹了,直接貼上實現數據圖表的代碼:
1from pyecharts import Bar 2# 圖表展現 3bar = Bar('評論中點贊數顯示圖') 4bar.add('點贊數',nickname_list,likedCount_list, is_stack=True, mark_line=['min', 'max'], mark_point=['average'] ) 5bar.render()
代碼是否是不多,它會在當前的目錄下面生成一個render.html文件,你用瀏覽器打開就是這樣:
接下來即是生成詞雲了,這裏也是貼上實現詞雲的代碼:
1from wordcloud import WordCloud 2import matplotlib.pyplot as plt 3# 詞雲展現 4content_text = " ".join(content_list) 5wordcloud = WordCloud(font_path=r"F:\字體\21\YGY20070701.ttf",max_words=200).generate(content_text) 6plt.figure() 7plt.imshow(wordcloud,interpolation='bilinear') 8plt.axis('off') 9plt.show()
代碼也是比較少的,系統會生成一個圖片。若是你使用pycharm這個IDE,你就會看到這樣相似的圖片:
最後我把點贊前十的評論都給貼出來,你們好好感覺一下:
一、陰天雨天晴天,都不如你和我聊天。
二、我高中同窗,上課坐在後面喜歡聽歌 喜歡戴墨鏡在學校裏穿梭 喜歡耍酷 走到哪都是一道風景!學校每次演出 他都會參與 每次出場都會響起一陣女生崇拜的尖叫聲。畢業後常常會在綜藝選秀節目看到他的身影 當時會以爲他可能會成爲一個大明星。時至今日 他如今的成就 和他的努力成正比 。
三、有本事你就照顧好本身,否則就老老實實地讓我來照顧你一生。
四、不是在撩你,是真的想和你在一塊兒。 也不是一點點喜歡你,是好喜歡好喜歡你。
五、我會在每一分鐘的60秒每個小時的60分鐘每一天的24小時每個星期的7天每個月的31天每年的365天想你,可是表白找不到人怎麼辦? 啊哈。
六、我試過一我的回家,我也試過一我的吃飯,一我的低頭學習,一我的拿行李箱。能夠親愛的,由於你我認識了更多志同道合又惺惺相惜的人啊,你是我口袋裏的男友,我多想有一天,本身很努力很優秀,只要靜靜的看着在臺上閃閃發光的你就行了,一路披荊斬棘,也謝謝你這麼優秀[愛心],此次換咱們來保護你了。
七、今天是分手的第23天,我得心情不是很美妙。我選擇忘記,從新開始,你昨晚缺還來找我!大膽!擾亂個人心神! 雖然我是個賣jia表的,可是你不能瞧不起我啊!。
八、陰天雨天晴天,都不如我這裏的PT鞋。
九、我是同性戀,我超喜歡個人同桌。雖然你們都不承認,可我始終相信咱們必定能夠在一塊兒的。鄭浩!我愛你!
十、我還喜歡你,並不僅是說說而已。但願你之後不要再遇到我這樣的人,敏感 總愛瞎想 膽小怕事 懦弱 又不能讓你快樂 也不能讓你喜歡我 你很累吧 可是又但願你遇到像我這樣的人 由於這樣的人真的真的好喜歡你啊[哀傷]。
看到這裏,我想說大家儘管秀,能傷害到我,就算我輸,畢竟單身多年也是憑實力的。。。。。