1. 程式人生 > >教你爬取抖音甜曲《好喜歡你》,感受荷爾蒙的氣息

教你爬取抖音甜曲《好喜歡你》,感受荷爾蒙的氣息

最近發現一首很火的歌,瞬間讓你感受到濃濃的青春懵懂感,這就是王廣允的《好喜歡你》。說實話,爬這種愛意濃濃的歌曲似乎不是我們這種單身XX應有的想法,但是還是想體會一下那些青春歲月裡的小幸福,話不多說,程式碼走起來。

 

本來想這裡直接貼上歌曲的連結,但是由於版權問題,大家可以去網易雲自行聽取哈。

 

我們這次爬取的資訊主要是評論點贊前十的資料,並據此進行資料視覺化操作,生成詞雲。

 

一、請求分析

我們首先開啟網易雲音樂的官網,進入《好喜歡你》的播放頁面,然後按F12或者審查元素獲取控制檯資訊。

url.png

 

我們這裡通過瀏覽器中的歌曲的id來獲取評論的連結,這是一個非常快捷的方式,我之前嘗試過很多的方法,感覺都太麻煩了,這個方式簡單,大家以後爬取都可以按照這種方式進行。

接著就是確定是通過get還是post的方式來提交資料的,我們發現Headers裡面顯示是Post方式:

post.png

 

涉及到表單的提交,一般都會附帶敏感資訊,例如cookie,所以這裡我們就需要檢查一下有沒有引數遺漏了:

請求引數.png

我們在Headers底下發現有一個Rorm Data裡面包含兩個引數params和encSecKey,待會我們提交的時候需要帶上這兩個引數。如果你爬過類似的網站,你就會猜測這個可能就是標識歌曲資訊和個人資訊的一個加密資料,實際上這個就是那樣的。本篇並不打算去介紹如何去破解這個加密演算法,我打算可能下一篇來介紹一下這個破解過程。

  一般爬取的時候,我們首先會預覽一下資料資訊,就控制檯下面的preview,發現伺服器返回的資料格式是json,所以我們等下就需要把資料轉換成json格式:

預覽.png

  看到沒有,這些資料是非常具有規律的,然後就可以開始書寫程式碼了。

  通常我們需要在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檔案,你用瀏覽器開啟就是這樣:

點贊數.png

接下來便是生成詞雲了,這裡也是貼上實現詞雲的程式碼:

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,你就會看到這樣類似的圖片:

ciyun.png

最後我把點贊前十的評論都給貼出來,大家好好感受一下:

 

1、陰天雨天晴天,都不如你和我聊天。

 

2、我高中同學,上課坐在後面喜歡聽歌  喜歡戴墨鏡在學校裡穿梭  喜歡耍酷  走到哪都是一道風景!學校每次演出 他都會參與 每次出場都會響起一陣女生崇拜的尖叫聲。畢業後經常會在綜藝選秀節目看到他的身影  當時會覺得他可能會成為一個大明星。時至今日 他現在的成就 和他的努力成正比 。

 

3、有本事你就照顧好自己,不然就老老實實地讓我來照顧你一輩子。

 

 4、不是在撩你,是真的想和你在一起。 也不是一點點喜歡你,是好喜歡好喜歡你。

 

5、我會在每一分鐘的60秒每一個小時的60分鐘每一天的24小時每一個星期的7天每一個月的31天每一年的365天想你,但是表白找不到人怎麼辦? 啊哈。

 

6、我試過一個人回家,我也試過一個人吃飯,一個人低頭學習,一個人拿行李箱。可以親愛的,因為你我認識了更多志同道合又惺惺相惜的人啊,你是我口袋裡的男朋友,我多想有一天,自己很努力很優秀,只要靜靜的看著在臺上閃閃發光的你就好了,一路披荊斬棘,也謝謝你這麼優秀[愛心],這次換我們來保護你了。

 

7、今天是分手的第23天,我得心情不是很美妙。我選擇忘記,重新開始,你昨晚缺還來找我!大膽!擾亂我的心神! 雖然我是個賣jia表的,但是你不能瞧不起我啊!。

 

8、陰天雨天晴天,都不如我這裡的PT鞋。

 

9、我是同性戀,我超喜歡我的同桌。雖然大家都不認可,可我始終相信我們一定可以在一起的。鄭浩!我愛你!

 

10、我還喜歡你,並不只是說說而已。希望你以後不要再遇到我這樣的人,敏感 總愛瞎想 膽小怕事 懦弱 又不能讓你快樂 也不能讓你喜歡我 你很累吧 但是又希望你遇到像我這樣的人 因為這樣的人真的真的好喜歡你啊[哀傷]。

 

看到這裡,我想說你們儘管秀,能傷害到我,就算我輸,畢竟單身多年也是憑實力的。。。。。