Python 爬取周杰倫《Mojito》MV 彈幕,這個評論亮了!

2021-02-14 CSDN

作者 | 黃偉呢

來源 | 數據分析與統計學之美

6月12日凌晨0點,周杰倫最新單曲《Mojito》正式上線,僅上線1小時銷售量就超過百萬張,預計今天這首單曲的銷量仍然會繼續攀升。這次新歌的歌名叫做《Mojito》,翻譯成中文是莫吉託,一種巴西雞尾酒,怪不得觀看這首歌MV的時候,感受到一股很濃烈的異域風情呢。
杰倫的上一首單曲《說好不哭》是在2019.9發布的,這首歌是與老搭檔方文山搭檔的歌曲,當時這首歌在QQ音樂上的銷量超過了1500萬張,創造歷史新高。而新歌《Mojito》則是與另外一位搭檔黃俊郎合作的單曲,相信這首歌肯定也會有不錯的銷量。好了回歸到正題,既然這首歌大家反應這麼大,那麼大家都是怎麼評論這首歌曲的呢?我們爬取了B站上面的彈幕數據,看看粉絲們都說了什麼。
B站彈幕的爬取B站的網頁確實變化的很快,我還記得5月份的時候,彈幕的接口數據還找得到。然而今天我找了好久都沒有找到,難道是今天的狀態不行?沒關係,在網頁中雖然沒找的這個彈幕數據的接口,但是我們之前找到了,我們直接拿過來用就好了。爬取B站彈幕數據的API:https://api.bilibili.com/x/v1/dm/list.so?oid=XXX從上述網址中我們看到了一個叫做oid的東西,後面是一串數字,不同的網頁有著不同的數字串,因此我這裡用「XXX」代替了。我們現在就要思考的是,這個oid我們應該怎麼獲取呢?不要著急下面帶大家一步步查找。我們要想知道這個oid是什麼,首先要獲取到cid。彈幕數據的接口我們雖然找不到,但是目錄頁接口還是可以找到的,網址如下。通過這個網址我們可以獲取到我們要的那個cid,cid這個鍵對應的值,就是我們要的oid數字串。https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp注意:由於這個MV只有一個完整的視頻,所以這裡只有一個cid,如果一個視頻是分不同小節發布的,這裡就會有多個cid,不同的cid代表不同的視頻。
我們將上面接口的url地址和拿到的oid數字串進行拼接,就可以得到這首MV彈幕的真正地址啦,現在把地址提供給大家。我們只需要請求這個網址,解析網頁後就可以獲取我們想要的數據啦。https://api.bilibili.com/x/v1/dm/list.so?oid=201056987這裡還有最後一點需要提醒大家的。觀察目錄頁的那個接口(網址如下),裡面有一串字符串BV1PK4y1b7dt,我們先不管這個參數是什麼,我們只關心這個字符串從哪裡來的呢?https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp最後我們觀察這首MV的原始網址(網址如下),原來這個字符串就在這首MV的原始網址中。好了,說到這裡,我就將B站彈幕數據爬取的一些參數的來龍去脈,給大家講清楚了,下面我們開始代碼部分吧。https://www.bilibili.com/video/BV1PK4y1b7dt?t=1

import requests
import json
import chardet
import re
from pprint import pprint
# 1.根據bvid請求得到cid
def get_cid():
    url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp'
    res = requests.get(url).text
    json_dict = json.loads(res)
    #pprint(json_dict)
    return json_dict["data"][0]["cid"]

# 2.根據cid請求彈幕,解析彈幕得到最終的數據
"""
注意:嗶哩嗶哩的網頁現在已經換了,那個list.so接口已經找不到,但是我們現在記住這個接口就行了。
"""
def get_data(cid):
    final_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=" + str(cid)
    final_res = requests.get(final_url)
    final_res.encoding = chardet.detect(final_res.content)['encoding']
    final_res = final_res.text
    pattern = re.compile('<d.*?>(.*?)</d>')
    data = pattern.findall(final_res)
    #pprint(final_res)
    return data

# 3.保存彈幕列表
def save_to_file(data):
    with open("dan_mu.txt", mode="w", encoding="utf-8") as f:
        for i in data:
            f.write(i)
            f.write("\n")

cid = get_cid()
data = get_data(cid)
save_to_file(data)

詞雲圖的製作

# 1 導入相關庫
import pandas as pd
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from imageio import imread

import warnings
warnings.filterwarnings("ignore")

# 2 讀取文本文件,並使用lcut()方法進行分詞
with open("dan_mu.txt",encoding="utf-8") as f:
    txt = f.read()
txt = txt.split()
data_cut = [jieba.lcut(x) for x in txt]
data_cut
# 3 讀取停用詞
with open(r"G:\6Tipdm\wordcloud\data\stoplist.txt",encoding="utf-8") as f:
    stop = f.read()
stop = stop.split()
stop = [" ","道","說道","說"] + stop
# 4 去掉停用詞之後的最終詞
s_data_cut = pd.Series(data_cut)
all_words_after = s_data_cut.apply(lambda x:[i for i in x if i not in stop])
# 5 詞頻統計
all_words = []
for i in all_words_after:
    all_words.extend(i)
word_count = pd.Series(all_words).value_counts()
# 6 詞雲圖的繪製
# 1)讀取背景圖片
back_picture = imread(r"G:\6Tipdm\wordcloud\jay1.jpg")

# 2)設置詞雲參數
wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",
               background_color="white",
               max_words=2000,
               mask=back_picture,
               max_font_size=200,
               random_state=42
              )
wc2 = wc.fit_words(word_count)

# 3)繪製詞雲圖
plt.figure(figsize=(16,8))
plt.imshow(wc2)
plt.axis("off")
plt.show()
wc.to_file("ciyun.png")

從詞雲圖可以看到,整個彈幕屏幕都是表達了粉絲對於《Mojito》這首歌的熱愛,可能有些詞語顯得有些莫名其妙,像震動、手機等詞語,但是看過MV的人都知道確實都是讚美之詞。首先,啊啊啊這個感嘆詞出現的次數是最多的,難道大家是剛剛聽到這首歌,驚喜之情無法用言語來表達?只好借用這樣的感嘆詞來表達自己內心的激動?這可不是我的風格,我要是喜歡就會用直白的話表達出來。其次,手機、震動這樣的詞出現的也很多。我剛剛看到這樣的詞語時候,我很莫名其妙。一首新歌MV和手機震動有啥關係呢?這原來是一個梗,恕我當時也沒怎麼關注,含義就是:周杰倫新歌銷量太好,網友調侃便說杰倫手機一直在震動。如果你也不知道這是一個什麼梗,提供一個網址給大家了解一下。https://www.ixiumei.com/a/20190917/364084.shtml我們還可以注意到,有一個詞的頻率出現次數也是很高的,那就是爺青回。哈哈,剛剛看到這個詞語的人肯定是很懵逼的,這是什麼意思呢?其實就是爺的青春回來了的意思。不得不說周杰倫的歌確實影響了我們這一代人,新歌一發布,不少人感嘆:杰倫,回不去了嗎?雖然我們的年紀在慢慢長大,但是我們卻始終習慣停留在青春的狀態。當然像愛、好聽、粉、億遍這樣的詞語大家也都知道是什麼意思,我也就不詳細說明了,總的來說從整個詞雲圖來看,基本上是0差評。《Mojito》整首歌給我的感覺就是節奏歡快,周杰倫雖然成了無數人的青春,不少人也是感嘆青春回不去了嗎?但是在這個炎炎夏日聆聽這首歡快的歌曲,也是及其不錯的。

更多精彩推薦

☞那些被大數據時代拋棄的人

☞反轉!物聯網火爆,開發者卻太難了!

☞TypeScript 熱度超 C 與 Python、Go 開發收入高、運維吃香,調查了 65000 名開發者有這些發現!

☞一篇與眾不同的 String、StringBuilder 和 StringBuffer 詳解

☞利用 AssemblyAI 在 PyTorch 中建立端到端的語音識別模型

☞贈書 | 供應鏈金融模式有哪些?區塊鏈在供應鏈金融中如何應用?

相關焦點

  • Python爬取冰冰B站評論
    Python爬取 ==冰冰== 第一條B站視頻的千條評論,繪製詞雲圖,看看大家說了什麼吧醬醬醬,那就開始吧==B站當日彈幕獲取== 冰冰B站視頻彈幕爬取原理解析在這裡插入圖片描述解析數據大家可以將獲取的json 接下來就是正式的爬取工作了,和爬取百度圖片原理一樣,自己試試吧。
  • 一小時銷量破百萬,Python告訴你周杰倫的《Mojito》到底有多火!
    【導語】:今天我們來聊聊周杰倫的新歌《Mojito》,Python技術部分請看第三部分,Show me data,用數據說話6月12日0:00,周杰倫的最新單曲《Mojito》正式上線。對周杰倫歌迷來說,這一天簡直就是過年了。
  • 用Python爬取B站、騰訊視頻、芒果TV和愛奇藝視頻彈幕
    不知道大家看視頻的時候會不會點開彈幕,於我而言,彈幕是視頻內容的良好補充,是一個組織良好的評論序列。通過分析彈幕,我們可以快速洞察廣大觀眾對於視頻的看法。 J哥通過一個關於《八佰》的視頻彈幕數據,繪製了如下詞雲圖,感覺效果還是可以的。 海量的彈幕數據不僅可以繪製此類詞雲圖,還可以調用百度AI進行情感分析。那麼,我們該如何獲取彈幕數據呢?
  • Python 爬取 394452 條《都挺好》彈幕數據,發現彈幕比劇還精彩?
    劇很精彩,但追劇界有句俗話說得好:「彈幕往往比劇更精彩」,為了讓精彩延續下去,我終究沒能忍住對(騰訊視頻)彈幕下手。經過一番折騰,發現彈幕是 JSON 格式動態加載的,而且加載得非常有規律,30 秒一發(80-100 條),多出的會隱藏。共計爬取了 394452 條彈幕(雨露均沾,每集平均 8575 條,每 30s 的間隔爬取),來挖一挖彈幕這個寶藏。
  • 誰說周杰倫新歌《mojito》MV沒有女主角?只能說你沒有用心看
    周杰倫發新歌了,周杰倫最新發布一支《mojito》,很多歌迷表示周杰倫的新歌MV沒有女主角,其實說沒有女主角的人,請你仔細看清楚點,女主的身影貫穿了整首歌的始終。而這個夏天周杰倫的新歌雖然很熱,但是聽著卻全身輕鬆,仿佛陣陣涼風,聽著周杰倫的《mojito》仿佛我們也去到了古巴,看著國外異域風情,感受著火辣、熱情的拉丁風情,走在淳樸的街道,是不是像回到了小時候抓爬樹抓知了的感覺?
  • Python爬取並分析 201865 條《隱秘的角落》彈幕
    今天我們就來用Python爬一爬這部熱門劇的彈幕,看看大家都在聊什麼?由於《隱秘的角落》是在愛奇藝獨播,所以數據從愛奇藝下手最直接。除了愛奇藝,可以考慮使用豆瓣、微博、知乎(電視劇數據分析 · 萬能三件套)的數據。
  • 周杰倫新歌《mojito》零點上線!MV全是粉色,帶耳釘跳舞暴瘦太多
    周杰倫新歌《mojito》零點上線!MV全是粉色元素,帶耳釘跳舞暴瘦太多說起周杰倫,那也是家家戶戶都知曉的歌手,他的每一首歌都廣為流傳。很多都是聽著他的歌長大的,很多都是因為周杰倫,而喜歡上了音樂。他已經很長時間沒有發新歌了,網友們特別想念他,不過就在6月12日零點他的新歌mv正式上線,網友們是不是特別開心呢?這一次他拍mv的時候是遠赴古巴拍攝,看著他坐在粉紅色的老爺車上城池,在馬拉貢濱海大道上,網友們都被這一景色給深深地吸引住了。
  • Python爬取某個18禁網站的電影資源
    最近在想著爬一些有趣的網站,豆瓣淘寶京東,這些網站大多都被爬爛了,然後就想著爬點簡單點的,例如某色網站啥的是吧,男生一般都會有幾個自己知道的網站
  • Python 爬取 201865 條《隱秘的角落》彈幕,發現看劇不如爬山?
    暑期推薦旅遊(來源微博)小五在這個端午假期也趕緊刷完了本劇,必須要寫篇文章了。由於《隱秘的角落》是在愛奇藝獨播,所以數據從愛奇藝下手最直接。[1]愛奇藝的彈幕數據是以 .z 形式的壓縮文件存在的,先獲取 tvid 列表,再根據 tvid 獲取彈幕的壓縮文件,最後對其進行解壓及存儲,大概就是這樣一個過程。這裡參考了「數據兔小白[2]的代碼,我又修改後實現分集爬取所有彈幕。
  • 用Python爬取糗事百科段子,可視化後結果發現
    selenium爬取段子信息這次我們利用selenium來實現翻頁爬取段子信息!browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})def get_data(page):     # 爬取數據函數
  • python爬蟲實戰:爬取全站小說排行榜
    新筆趣閣是廣大書友最值得收藏的網絡小說閱讀網,網站收錄了當前.我就不打廣告了(其他滿足下文條件的網站也行,之前已經有做過簡單爬取章節的先例了,但效果不太理想,有很多不需要的成分被留下了,來連結:http://python.jobbole.com
  • 周杰倫新歌mojito在哪聽 周杰倫新歌mojito歌詞信息試聽地址
    周杰倫新歌mojito在哪聽 周杰倫新歌mojito歌詞信息試聽地址時間:2020-06-13 07:10   來源:今日頭條   責任編輯:毛青青 川北在線核心提示:原標題:周杰倫新歌mojito在哪聽 周杰倫新歌mojito歌詞信息試聽地址 周杰倫新歌mojito在哪聽?
  • 聽完周杰倫新歌,我更想你了|周杰倫|華語樂壇|mojito|昆凌
    啊,我可真箇「平平無奇」的《可愛女人》~1.這杯mojito帶來的快樂,與酒精無關有人說,世界上最漫長的等待,莫過於等周杰倫發新歌出新專輯。6月6日凌晨2點,周杰倫在社交平臺上曬出與愛車的合影,並配文稱「下禮拜有新歌聽了」。
  • 爬取24w+彈幕信息後,我果斷去追劇了
    本文以最近熱播排行榜第一名的《流金歲月》為例子,手把手教你如何獲取愛奇藝電視劇彈幕數據。尋找彈幕信息愛奇藝的彈幕數據是以.z形式的壓縮文件存在,先通過以下步驟找到彈幕url, tvid列表,再獲取壓縮文件。利用工具對獲取的壓縮文件進行解壓、處理、存儲及分析。
  • Python爬了下天貓的杜蕾斯評論
    由於「杜蕾斯」的賣家有很多,這裡我們只選取頁面的第一個圖片,進行其中的「評論數據」的爬取。  點擊第一個圖片,進入到我們最終想要爬取數據的網頁。可以看到該頁面有很多評論信息,這也是我們想要抓取的信息。這次我已經帶著cookies發送了請求呀,為什麼還是獲取不到我們想要的數據,會不會「評論數據」根本就不再這個url中呢?那麼真正的true_url究竟在哪裡呢?下面我們慢慢解密。
  • 周杰倫新歌《前世情人》mv評分 網友評論匯總(圖)
    周杰倫新歌《前世情人》mv公開(點擊查看:》》周杰倫《前世情人》mv+歌詞),登陸各大音樂平臺,刷新播放量和評論量。那麼網友對這首歌的評論又是怎麼樣的呢?下面我們來看看周杰倫新歌《前世情人》mv網友評論匯總。
  • MOJITO 發布一周,爬一波彈幕分析下
    爬取 B 站彈幕 彈幕數據的爬取比較簡單,我就不一步一步的抓請求給各位演示了,注意下面這幾個請求連接:彈幕請求地址:上面這兩個彈幕地址實際上都需要一個叫 oid 的東西,這個 oid 獲取方式如下:首先可以找到一個目錄頁接口:https://api.bilibili.com/x/player/pagelist?
  • 周杰倫《mojito》被疑抄襲,編曲親自回復,原來是被歌迷坑了!
    預約300萬人,上線1小時秒破百萬銷量,這就是周杰倫新歌《mojito》的超強魅力。作為一代老天王,十多年來仍能保持這種成績,相信沒有人會去質疑周董實力。在平臺癱瘓的情況下,即便沒有購買成功也能先一睹歌曲MV,這是周杰倫對粉絲拿出的最大誠意了。
  • 手把手教你用Python爬中國電影票房數據
    >有序的集合,裡面的元素可以是之前提到的任何一種數據格式和數據類型(整型、浮點、列表……),並可以隨時指定順序添加其中的元素,其形式是:liebiao.append('瘦')print(liebiao)>>>[1, 2.223, -3, '劉強東', '章澤天', '周杰倫', '昆凌', ['微博', 'B
  • python爬蟲教程,爬取貓眼電影 ,一網打盡好電影
    查閱資料之後知道了一個叫做FontCreator的軟體,用這個軟體可以打開我們下載的字體文件,沒有安裝這個軟體的可以進入官網https://www.high-logic.com/下載安裝,如果下載得很慢的可以用百度雲下載(連結:https://pan.baidu.com/s/1ImxwPhKdzZo2g4bIjiGCZw ,提取碼:m0yf )。