<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Python 爬取分析周杰倫《Mojito》MV彈幕

          共 4312字,需瀏覽 9分鐘

           ·

          2020-12-04 20:53

          2020年6月12日凌晨0點(diǎn),Jay Chou最新單曲《Mojito》正式上線,僅上線1小時(shí)銷(xiāo)售量就超過(guò)百萬(wàn)張,預(yù)計(jì)今天這首單曲的銷(xiāo)量仍然會(huì)繼續(xù)攀升。這次新歌的歌名叫做《Mojito》,翻譯成中文是莫吉托,一種巴西雞尾酒,怪不得觀看這首歌MV的時(shí)候,感受到一股很濃烈的異域風(fēng)情呢。

          杰倫的上一首單曲《說(shuō)好不哭》是在2019.9發(fā)布的,這首歌是與老搭檔方文山搭檔的歌曲,當(dāng)時(shí)這首歌在QQ音樂(lè)上的銷(xiāo)量超過(guò)了1500萬(wàn)張,創(chuàng)造歷史新高。而新歌《Mojito》則是與另外一位搭檔黃俊郎合作的單曲,相信這首歌肯定也會(huì)有不錯(cuò)的銷(xiāo)量。

          好了回歸到正題,既然這首歌大家反應(yīng)這么大,那么大家都是怎么評(píng)論這首歌曲的呢?我們爬取了B站上面的彈幕數(shù)據(jù),看看粉絲們都說(shuō)了什么。

          1.B站彈幕的爬取

          B站的網(wǎng)頁(yè)確實(shí)變化的很快,我還記得5月份的時(shí)候,彈幕的接口數(shù)據(jù)還找得到。然而今天我找了好久都沒(méi)有找到,難道是今天的狀態(tài)不行?沒(méi)關(guān)系,在網(wǎng)頁(yè)中雖然沒(méi)找的這個(gè)彈幕數(shù)據(jù)的接口,但是我們之前找到了,我們直接拿過(guò)來(lái)用就好了。

          爬取B站彈幕數(shù)據(jù)的API:https://api.bilibili.com/x/v1/dm/list.so?oid=XXX

          從上述網(wǎng)址中我們看到了一個(gè)叫做oid的東西,后面是一串?dāng)?shù)字,不同的網(wǎng)頁(yè)有著不同的數(shù)字串,因此我這里用“XXX”代替了。我們現(xiàn)在就要思考的是,這個(gè)oid我們應(yīng)該怎么獲取呢?不要著急下面帶大家一步步查找。

          我們要想知道這個(gè)oid是什么,首先要獲取到cid。彈幕數(shù)據(jù)的接口我們雖然找不到,但是目錄頁(yè)接口還是可以找到的,網(wǎng)址如下。通過(guò)這個(gè)網(wǎng)址我們可以獲取到我們要的那個(gè)cidcid這個(gè)鍵對(duì)應(yīng)的值,就是我們要的oid數(shù)字串。

          https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp

          注意:由于這個(gè)MV只有一個(gè)完整的視頻,所以這里只有一個(gè)cid,如果一個(gè)視頻是分不同小節(jié)發(fā)布的,這里就會(huì)有多個(gè)cid,不同的cid代表不同的視頻。

          我們將上面接口的url地址和拿到的oid數(shù)字串進(jìn)行拼接,就可以得到這首MV彈幕的真正地址啦,現(xiàn)在把地址提供給大家。我們只需要請(qǐng)求這個(gè)網(wǎng)址,解析網(wǎng)頁(yè)后就可以獲取我們想要的數(shù)據(jù)啦。

          https://api.bilibili.com/x/v1/dm/list.so?oid=201056987

          這里還有最后一點(diǎn)需要提醒大家的。觀察目錄頁(yè)的那個(gè)接口(網(wǎng)址如下),里面有一串字符串BV1PK4y1b7dt,我們先不管這個(gè)參數(shù)是什么,我們只關(guān)心這個(gè)字符串從哪里來(lái)的呢?

          https://api.bilibili.com/x/player/pagelist?bvid=BV1PK4y1b7dt&jsonp=jsonp

          最后我們觀察這首MV的原始網(wǎng)址(網(wǎng)址如下),原來(lái)這個(gè)字符串就在這首MV的原始網(wǎng)址中。好了,說(shuō)到這里,我就將B站彈幕數(shù)據(jù)爬取的一些參數(shù)的來(lái)龍去脈,給大家講清楚了,下面我們開(kāi)始代碼部分吧。

          https://www.bilibili.com/video/BV1PK4y1b7dt?t=1

          代碼如下:

          import?requests
          import?json
          import?chardet
          import?re
          from?pprint?import?pprint
          #?1.根據(jù)bvid請(qǐng)求得到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.根據(jù)cid請(qǐng)求彈幕,解析彈幕得到最終的數(shù)據(jù)
          """
          注意:?jiǎn)袅▎袅ǖ木W(wǎng)頁(yè)現(xiàn)在已經(jīng)換了,那個(gè)list.so接口已經(jīng)找不到,但是我們現(xiàn)在記住這個(gè)接口就行了。
          """

          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('(.*?)')
          ????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)

          結(jié)果如下:

          2.詞云圖的制作

          #?1?導(dǎo)入相關(guān)庫(kù)
          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()方法進(jìn)行分詞
          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?=?["?","道","說(shuō)道","說(shuō)"]?+?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?詞頻統(tǒng)計(jì)
          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)設(shè)置詞云參數(shù)
          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")

          結(jié)果如下:從詞云圖可以看到,整個(gè)彈幕屏幕都是表達(dá)了粉絲對(duì)于《Mojito》這首歌的熱愛(ài),可能有些詞語(yǔ)顯得有些莫名其妙,像震動(dòng)手機(jī)等詞語(yǔ),但是看過(guò)MV的人都知道確實(shí)都是贊美之詞。

          首先,啊啊啊這個(gè)感嘆詞出現(xiàn)的次數(shù)是最多的,難道大家是剛剛聽(tīng)到這首歌,驚喜之情無(wú)法用言語(yǔ)來(lái)表達(dá)?只好借用這樣的感嘆詞來(lái)表達(dá)自己內(nèi)心的激動(dòng)?這可不是我的風(fēng)格,我要是喜歡就會(huì)用直白的話表達(dá)出來(lái)。

          其次,手機(jī)震動(dòng)這樣的詞出現(xiàn)的也很多。我剛剛看到這樣的詞語(yǔ)時(shí)候,我很莫名其妙。一首新歌MV和手機(jī)震動(dòng)有啥關(guān)系呢?這原來(lái)是一個(gè)梗,恕我當(dāng)時(shí)也沒(méi)怎么關(guān)注,含義就是:周杰倫新歌銷(xiāo)量太好,網(wǎng)友調(diào)侃便說(shuō)杰倫手機(jī)一直在震動(dòng)。如果你也不知道這是一個(gè)什么梗,提供一個(gè)網(wǎng)址給大家了解一下。

          https://www.ixiumei.com/a/20190917/364084.shtml

          我們還可以注意到,有一個(gè)詞的頻率出現(xiàn)次數(shù)也是很高的,那就是爺青回。哈哈,剛剛看到這個(gè)詞語(yǔ)的人肯定是很懵逼的,這是什么意思呢?其實(shí)就是爺?shù)那啻夯貋?lái)了的意思。不得不說(shuō)周杰倫的歌確實(shí)影響了我們這一代人,新歌一發(fā)布,不少人感嘆:杰倫,回不去了嗎?雖然我們的年紀(jì)在慢慢長(zhǎng)大,但是我們卻始終習(xí)慣停留在青春的狀態(tài)。

          當(dāng)然像愛(ài)好聽(tīng)億遍這樣的詞語(yǔ)大家也都知道是什么意思,我也就不詳細(xì)說(shuō)明了,總的來(lái)說(shuō)從整個(gè)詞云圖來(lái)看,基本上是0差評(píng)。《Mojito》整首歌給我的感覺(jué)就是節(jié)奏歡快,周杰倫雖然成了無(wú)數(shù)人的青春,不少人也是感嘆青春回不去了嗎?但是在這個(gè)炎炎夏日聆聽(tīng)這首歡快的歌曲,也是及其不錯(cuò)的。

          推薦閱讀



          一行代碼讓 pandas 的 apply 速度飆到極致!


          用 Style 方法提高 Pandas 數(shù)據(jù)的顏值


          高性能 Pandas 方法:query 和 eval


          點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員




          點(diǎn)贊鼓勵(lì)一下

          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最新国产在线视频 | 日韩无码电影 | 欧美色色色| 久久久久久久极品内射 | 黄色国产在线播放 |