教你爬取抖音甜曲《好喜歡你》,感受荷爾蒙的氣息
最近發現一首很火的歌,瞬間讓你感受到濃濃的青春懵懂感,這就是王廣允的《好喜歡你》。說實話,爬這種愛意濃濃的歌曲似乎不是我們這種單身XX應有的想法,但是還是想體會一下那些青春歲月裡的小幸福,話不多說,程式碼走起來。
本來想這裡直接貼上歌曲的連結,但是由於版權問題,大家可以去網易雲自行聽取哈。
我們這次爬取的資訊主要是評論點贊前十的資料,並據此進行資料視覺化操作,生成詞雲。
一、請求分析
我們首先開啟網易雲音樂的官網,進入《好喜歡你》的播放頁面,然後按F12或者審查元素獲取控制檯資訊。
我們這裡通過瀏覽器中的歌曲的id來獲取評論的連結,這是一個非常快捷的方式,我之前嘗試過很多的方法,感覺都太麻煩了,這個方式簡單,大家以後爬取都可以按照這種方式進行。
接著就是確定是通過get還是post的方式來提交資料的,我們發現Headers裡面顯示是Post方式:
涉及到表單的提交,一般都會附帶敏感資訊,例如cookie,所以這裡我們就需要檢查一下有沒有引數遺漏了:
我們在Headers底下發現有一個Rorm Data裡面包含兩個引數params和encSecKey,待會我們提交的時候需要帶上這兩個引數。如果你爬過類似的網站,你就會猜測這個可能就是標識歌曲資訊和個人資訊的一個加密資料,實際上這個就是那樣的。本篇並不打算去介紹如何去破解這個加密演算法,我打算可能下一篇來介紹一下這個破解過程。
一般爬取的時候,我們首先會預覽一下資料資訊,就控制檯下面的preview,發現伺服器返回的資料格式是json,所以我們等下就需要把資料轉換成json格式:
看到沒有,這些資料是非常具有規律的,然後就可以開始書寫程式碼了。
通常我們需要在headers裡面新增一些host,referer,user-agent等,這是防止被網站識別出爬蟲而被限制訪問。
二、程式碼書寫
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]
三、資料視覺化
這裡我使用了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,你就會看到這樣類似的圖片:
最後我把點贊前十的評論都給貼出來,大家好好感受一下:
1、陰天雨天晴天,都不如你和我聊天。
2、我高中同學,上課坐在後面喜歡聽歌 喜歡戴墨鏡在學校裡穿梭 喜歡耍酷 走到哪都是一道風景!學校每次演出 他都會參與 每次出場都會響起一陣女生崇拜的尖叫聲。畢業後經常會在綜藝選秀節目看到他的身影 當時會覺得他可能會成為一個大明星。時至今日 他現在的成就 和他的努力成正比 。
3、有本事你就照顧好自己,不然就老老實實地讓我來照顧你一輩子。
4、不是在撩你,是真的想和你在一起。 也不是一點點喜歡你,是好喜歡好喜歡你。
5、我會在每一分鐘的60秒每一個小時的60分鐘每一天的24小時每一個星期的7天每一個月的31天每一年的365天想你,但是表白找不到人怎麼辦? 啊哈。
6、我試過一個人回家,我也試過一個人吃飯,一個人低頭學習,一個人拿行李箱。可以親愛的,因為你我認識了更多志同道合又惺惺相惜的人啊,你是我口袋裡的男朋友,我多想有一天,自己很努力很優秀,只要靜靜的看著在臺上閃閃發光的你就好了,一路披荊斬棘,也謝謝你這麼優秀[愛心],這次換我們來保護你了。
7、今天是分手的第23天,我得心情不是很美妙。我選擇忘記,重新開始,你昨晚缺還來找我!大膽!擾亂我的心神! 雖然我是個賣jia表的,但是你不能瞧不起我啊!。
8、陰天雨天晴天,都不如我這裡的PT鞋。
9、我是同性戀,我超喜歡我的同桌。雖然大家都不認可,可我始終相信我們一定可以在一起的。鄭浩!我愛你!
10、我還喜歡你,並不只是說說而已。希望你以後不要再遇到我這樣的人,敏感 總愛瞎想 膽小怕事 懦弱 又不能讓你快樂 也不能讓你喜歡我 你很累吧 但是又希望你遇到像我這樣的人 因為這樣的人真的真的好喜歡你啊[哀傷]。
看到這裡,我想說你們儘管秀,能傷害到我,就算我輸,畢竟單身多年也是憑實力的。。。。。