Python爬取冰冰B站評論

2021-02-26 北山啦

Python爬取 ==冰冰== 第一條B站視頻的千條評論,繪製詞雲圖,看看大家說了什麼吧

醬醬醬,那就開始吧




==B站當日彈幕獲取== 冰冰B站視頻彈幕爬取原理解析

數據收集獲取接口

嗶哩嗶哩其實留了很多接口,可以供我們來獲取數據。首先打開目標網站,並查看網頁源碼,發現評論內容不在源碼中,可以確認評論是動態生成的。於是進入開發者模式,查找返回的內容。

查看數據

點擊preview即可發現評論數據在這裡

解析URL

去掉第一個和最後一個參數可得評論URL,https://api.bilibili.com/x/v2/replyjsonp&type=1&oid=800760067&sort=2&pn=.

在這裡插入圖片描述解析數據

大家可以將獲取的json 接下來就是正式的爬取工作了,和爬取百度圖片原理一樣,自己試試吧。為了方便查看json數據,可以將html中的json複製到json在線解析中查看原文連結:https://blog.csdn.net/qq_45176548/article/details/112100932

數據分析

數據獲取後,就可以開始初步的數據分析了

import pandas as pd

data = pd.read_excel(r"bingbing.xlsx")
data.head()


用戶性別等級評論點讚0食貧道男6[呆][呆][呆]你來了嘿!1584571畢導THU男6我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼1484392老師好我叫何同學男6[熱詞系列_知識增加]896343央視網快看保密6冰冰來了!我們要失業了嗎[doge][doge]1183704廈門大學保密5哇歡迎冰冰!!!66196

原文連結

數據描述
data.describe()


等級點讚count1180.0000001180.000000mean4.4813562200.617797std1.04137910872.524850min2.0000001.00000025%4.0000004.00000050%5.0000009.00000075%5.000000203.750000max6.000000158457.000000刪除空值
data.dropna()


用戶性別等級評論點讚0食貧道男6[呆][呆][呆]你來了嘿!1584571畢導THU男6我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼1484392老師好我叫何同學男6[熱詞系列_知識增加]896343央視網快看保密6冰冰來了!我們要失業了嗎[doge][doge]1183704廈門大學保密5哇歡迎冰冰!!!66196...1175黑旗魚保密511小時一百萬,好快[驚訝]51176是你的益達哦男6冰冰粉絲上漲速度:11小時107.3萬,平均每小時上漲9.75萬,每分鐘上漲1625,每秒鐘...51177快樂風男崔斯特男4軍訓的時候去了趟廁所,出來忘記是哪個隊伍了。看了up的視頻才想起來,是三連[doge][滑稽]51178很認真的大熊男5我覺得冰冰主持春晚應該問題不大吧。[OK]51179飛拖鞋呀吼保密5《論一個2級號如何在2020年最後一天成為百大up主》5

1180 rows × 5 columns

刪除重複值
data.drop_duplicates()


用戶性別等級評論點讚0食貧道男6[呆][呆][呆]你來了嘿!1584571畢導THU男6我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼1484392老師好我叫何同學男6[熱詞系列_知識增加]896343央視網快看保密6冰冰來了!我們要失業了嗎[doge][doge]1183704廈門大學保密5哇歡迎冰冰!!!66196...1175黑旗魚保密511小時一百萬,好快[驚訝]51176是你的益達哦男6冰冰粉絲上漲速度:11小時107.3萬,平均每小時上漲9.75萬,每分鐘上漲1625,每秒鐘...51177快樂風男崔斯特男4軍訓的時候去了趟廁所,出來忘記是哪個隊伍了。看了up的視頻才想起來,是三連[doge][滑稽]51178很認真的大熊男5我覺得冰冰主持春晚應該問題不大吧。[OK]51179飛拖鞋呀吼保密5《論一個2級號如何在2020年最後一天成為百大up主》5

1179 rows × 5 columns

可視化展示

用的的工具是pyecharts,可以參考快速掌握數據可視化工具pyecharts

點讚TOP20
df1 = data.sort_values(by="點讚",ascending=False).head(20)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

c1 = (
    Bar()
    .add_xaxis(df1["評論"].to_list())
    .add_yaxis("點讚數", df1["點讚"].to_list(), color=Faker.rand_color())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="評論熱度Top20"),
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
    )
    .render_notebook()
)
c1

在這裡插入圖片描述等級分布
data.等級.value_counts().sort_index(ascending=False)

6    165
5 502
4 312
3 138
2 63
Name: 等級, dtype: int64

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c2 = (
    Pie()
    .add(
        "",
        [list(z) for z in zip([str(i) for i in range(2,7)], [63,138,312,502,165])],
        radius=["40%", "75%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="等級分布"),
        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render_notebook()
)
c2

在這裡插入圖片描述性別分布
data.性別.value_counts().sort_index(ascending=False)

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c4 = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(["男","女","保密"], ["404",'103','673'])],
        radius=["40%", "75%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="性別分布"),
        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render_notebook()
    
)
c4

在這裡插入圖片描述繪製詞雲圖
from wordcloud import WordCloud
import jieba
from tkinter import _flatten
from matplotlib.pyplot import imread
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt
with open('stoplist.txt', 'r', encoding='utf-8') as f:
    stopWords = f.read()
with open('停用詞.txt','r',encoding='utf-8') as t:
    stopWord = t.read()
total = stopWord.split() + stopWords.split()
def my_word_cloud(data=None, stopWords=None, img=None):
    dataCut = data.apply(jieba.lcut)  # 分詞
    dataAfter = dataCut.apply(lambda x: [i for i in x if i not in stopWords])  # 去除停用詞
    wordFre = pd.Series(_flatten(list(dataAfter))).value_counts()  # 統計詞頻
    mask = plt.imread(img)
    plt.figure(figsize=(20,20))
    wc  = WordCloud(scale=10,font_path='C:/Windows/Fonts/STXINGKA.TTF',mask=mask,background_color="white",)
    wc.fit_words(wordFre)
    plt.imshow(wc)
    plt.axis('off')
my_word_cloud(data=data["評論"],stopWords=stopWords,img="1.jpeg")

Summary在這裡插入圖片描述後記

根據彈幕獲取的詞雲圖,可以參考 冰冰B站視頻彈幕爬取原理解析

通過之前博客的學習,想必大家已經對Python網絡爬蟲有了了解,希望大家動手實踐。筆者能力有限,有更多有趣的發現,歡迎私信或留言

推薦閱讀:

BeautifulSoup爬取豆瓣電影Top250Python網絡爬蟲基礎--BeautifulSoup

到這裡就結束了,如果對你有幫助你,歡迎點讚關注,你的點讚對我很重要

Python爬取 ==冰冰== 第一條B站視頻的千條評論,繪製詞雲圖,看看大家說了什麼吧

醬醬醬,那就開始吧

@

獲取接口

查看數據

解析URL

解析數據

數據描述

刪除空值

刪除重複值

點讚TOP20

等級分布

性別分布

繪製詞雲圖

Summary

獲取接口

查看數據

解析URL

解析數據

數據描述

刪除空值

刪除重複值

點讚TOP20

等級分布

性別分布

繪製詞雲圖

Summary


==B站當日彈幕獲取== 冰冰B站視頻彈幕爬取原理解析

數據收集獲取接口

嗶哩嗶哩其實留了很多接口,可以供我們來獲取數據。首先打開目標網站,並查看網頁源碼,發現評論內容不在源碼中,可以確認評論是動態生成的。於是進入開發者模式,查找返回的內容。

查看數據

點擊preview即可發現評論數據在這裡

解析URL

去掉第一個和最後一個參數可得評論URL,https://api.bilibili.com/x/v2/replyjsonp&type=1&oid=800760067&sort=2&pn=.

在這裡插入圖片描述解析數據

大家可以將獲取的json 接下來就是正式的爬取工作了,和爬取百度圖片原理一樣,自己試試吧。為了方便查看json數據,可以將html中的json複製到json在線解析中查看原文連結:https://blog.csdn.net/qq_45176548/article/details/112100932

數據分析

數據獲取後,就可以開始初步的數據分析了

import pandas as pd

data = pd.read_excel(r"bingbing.xlsx")
data.head()


用戶性別等級評論點讚0食貧道男6[呆][呆][呆]你來了嘿!1584571畢導THU男6我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼1484392老師好我叫何同學男6[熱詞系列_知識增加]896343央視網快看保密6冰冰來了!我們要失業了嗎[doge][doge]1183704廈門大學保密5哇歡迎冰冰!!!66196

原文連結

數據描述
data.describe()


等級點讚count1180.0000001180.000000mean4.4813562200.617797std1.04137910872.524850min2.0000001.00000025%4.0000004.00000050%5.0000009.00000075%5.000000203.750000max6.000000158457.000000刪除空值
data.dropna()


用戶性別等級評論點讚0食貧道男6[呆][呆][呆]你來了嘿!1584571畢導THU男6我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼1484392老師好我叫何同學男6[熱詞系列_知識增加]896343央視網快看保密6冰冰來了!我們要失業了嗎[doge][doge]1183704廈門大學保密5哇歡迎冰冰!!!66196...1175黑旗魚保密511小時一百萬,好快[驚訝]51176是你的益達哦男6冰冰粉絲上漲速度:11小時107.3萬,平均每小時上漲9.75萬,每分鐘上漲1625,每秒鐘...51177快樂風男崔斯特男4軍訓的時候去了趟廁所,出來忘記是哪個隊伍了。看了up的視頻才想起來,是三連[doge][滑稽]51178很認真的大熊男5我覺得冰冰主持春晚應該問題不大吧。[OK]51179飛拖鞋呀吼保密5《論一個2級號如何在2020年最後一天成為百大up主》5

1180 rows × 5 columns

刪除重複值
data.drop_duplicates()


用戶性別等級評論點讚0食貧道男6[呆][呆][呆]你來了嘿!1584571畢導THU男6我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼1484392老師好我叫何同學男6[熱詞系列_知識增加]896343央視網快看保密6冰冰來了!我們要失業了嗎[doge][doge]1183704廈門大學保密5哇歡迎冰冰!!!66196...1175黑旗魚保密511小時一百萬,好快[驚訝]51176是你的益達哦男6冰冰粉絲上漲速度:11小時107.3萬,平均每小時上漲9.75萬,每分鐘上漲1625,每秒鐘...51177快樂風男崔斯特男4軍訓的時候去了趟廁所,出來忘記是哪個隊伍了。看了up的視頻才想起來,是三連[doge][滑稽]51178很認真的大熊男5我覺得冰冰主持春晚應該問題不大吧。[OK]51179飛拖鞋呀吼保密5《論一個2級號如何在2020年最後一天成為百大up主》5

1179 rows × 5 columns

可視化展示

用的的工具是pyecharts,可以參考快速掌握數據可視化工具pyecharts

點讚TOP20
df1 = data.sort_values(by="點讚",ascending=False).head(20)

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

c1 = (
    Bar()
    .add_xaxis(df1["評論"].to_list())
    .add_yaxis("點讚數", df1["點讚"].to_list(), color=Faker.rand_color())
    .set_global_opts(
        title_opts=opts.TitleOpts(title="評論熱度Top20"),
        datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],
    )
    .render_notebook()
)
c1

在這裡插入圖片描述等級分布
data.等級.value_counts().sort_index(ascending=False)

6    165
5 502
4 312
3 138
2 63
Name: 等級, dtype: int64

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c2 = (
    Pie()
    .add(
        "",
        [list(z) for z in zip([str(i) for i in range(2,7)], [63,138,312,502,165])],
        radius=["40%", "75%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="等級分布"),
        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render_notebook()
)
c2

在這裡插入圖片描述性別分布
data.性別.value_counts().sort_index(ascending=False)

from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker

c4 = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(["男","女","保密"], ["404",'103','673'])],
        radius=["40%", "75%"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="性別分布"),
        legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    .render_notebook()
    
)
c4

在這裡插入圖片描述繪製詞雲圖
from wordcloud import WordCloud
import jieba
from tkinter import _flatten
from matplotlib.pyplot import imread
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt
with open('stoplist.txt', 'r', encoding='utf-8') as f:
    stopWords = f.read()
with open('停用詞.txt','r',encoding='utf-8') as t:
    stopWord = t.read()
total = stopWord.split() + stopWords.split()
def my_word_cloud(data=None, stopWords=None, img=None):
    dataCut = data.apply(jieba.lcut)  # 分詞
    dataAfter = dataCut.apply(lambda x: [i for i in x if i not in stopWords])  # 去除停用詞
    wordFre = pd.Series(_flatten(list(dataAfter))).value_counts()  # 統計詞頻
    mask = plt.imread(img)
    plt.figure(figsize=(20,20))
    wc  = WordCloud(scale=10,font_path='C:/Windows/Fonts/STXINGKA.TTF',mask=mask,background_color="white",)
    wc.fit_words(wordFre)
    plt.imshow(wc)
    plt.axis('off')
my_word_cloud(data=data["評論"],stopWords=stopWords,img="1.jpeg")

Summary在這裡插入圖片描述後記

根據彈幕獲取的詞雲圖,可以參考 冰冰B站視頻彈幕爬取原理解析

通過之前博客的學習,想必大家已經對Python網絡爬蟲有了了解,希望大家動手實踐。筆者能力有限,有更多有趣的發現,歡迎私信或留言

推薦閱讀:

BeautifulSoup爬取豆瓣電影Top250Python網絡爬蟲基礎--BeautifulSoup

到這裡就結束了,如果對你有幫助你,歡迎點讚關注,你的點讚對我很重要

相關焦點

  • Python爬取某個18禁網站的電影資源
    最近在想著爬一些有趣的網站,豆瓣淘寶京東,這些網站大多都被爬爛了,然後就想著爬點簡單點的,例如某色網站啥的是吧,男生一般都會有幾個自己知道的網站
  • 用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
  • Python爬了下天貓的杜蕾斯評論
    這裡我想要爬取的是杜蕾斯。因此我們直接搜索「杜蕾斯」。由於「杜蕾斯」的賣家有很多,這裡我們只選取頁面的第一個圖片,進行其中的「評論數據」的爬取。  點擊第一個圖片,進入到我們最終想要爬取數據的網頁。可以看到該頁面有很多評論信息,這也是我們想要抓取的信息。
  • python爬蟲教程,爬取貓眼電影 ,一網打盡好電影
    點擊藍字「python
  • Python 爬取周杰倫《Mojito》MV 彈幕,這個評論亮了!
    好了回歸到正題,既然這首歌大家反應這麼大,那麼大家都是怎麼評論這首歌曲的呢?我們爬取了B站上面的彈幕數據,看看粉絲們都說了什麼。B站彈幕的爬取B站的網頁確實變化的很快,我還記得5月份的時候,彈幕的接口數據還找得到。然而今天我找了好久都沒有找到,難道是今天的狀態不行?沒關係,在網頁中雖然沒找的這個彈幕數據的接口,但是我們之前找到了,我們直接拿過來用就好了。
  • python爬取44130條用戶觀影數據,分析挖掘用戶與電影之間的隱藏信息!
    在『豆瓣』平臺爬取用戶觀影數據。爬取用戶列表網頁分析為了獲取用戶,我選擇了其中一部電影的影評,這樣可以根據評論的用戶去獲取其用戶名稱(後面爬取用戶觀影記錄只需要『用戶名稱』)爬取用戶的觀影記錄上一步爬取到『用戶名稱』,接著爬取用戶觀影記錄需要用到『用戶名稱』。
  • 用python實現一個豆瓣通用爬蟲(登陸、爬取、可視化分析)
    然而我所在的組剛好遇到的是python爬蟲的小課題。心想這不是很簡單嘛,搞啥呢?想著去搞新的時間精力可能不太夠,索性自己就把豆瓣電影的評論(短評)搞一搞吧。之前有寫過哪吒那篇類似的,但今天這篇要寫的像姨母般詳細。本篇主要實現的是對任意一部電影短評(熱門)的抓取以及可視化分析。
  • 用Python爬取B站、騰訊視頻、芒果TV和愛奇藝視頻彈幕
    不知道大家看視頻的時候會不會點開彈幕,於我而言,彈幕是視頻內容的良好補充,是一個組織良好的評論序列。通過分析彈幕,我們可以快速洞察廣大觀眾對於視頻的看法。 J哥通過一個關於《八佰》的視頻彈幕數據,繪製了如下詞雲圖,感覺效果還是可以的。 海量的彈幕數據不僅可以繪製此類詞雲圖,還可以調用百度AI進行情感分析。那麼,我們該如何獲取彈幕數據呢?
  • 人生苦短,我用Python
    Python入門爬蟲這是我的第一個python項目,在這裡與大家分享出來~需求設計開始我們將解析的功能放在了服務端,但是後來考慮到用戶隱私問題。後來將解析功能放到了app端,服務端只負責收集數據,然後將新數據發送給app端。關於服務端主要是分離出兩個功能,一、響應app端請求返回數據。二、爬取數據,存入資料庫。
  • Python爬取視頻之日本愛情電影(嘿嘿嘿)
    環境 & 依賴Win10 64bit IDE: PyCharm Python 3.6 python-site-packegs: requests + BeautifulSoup + lxml + re + m3u8在已經安裝pip的環境下均可直接命令行安裝網站解析
  • 2017年Python中文社區公眾號十大熱門文章
    去年上映的《羞羞的鐵拳》可謂是票房大豐收啊,作者通過豆瓣爬蟲數據對電影評論做了情感分析。文章介紹如何不利用第三方庫,僅用python自帶的標準庫來構造一個決策樹。用 Python分析胡歌的《獵場》到底值不值得看?
  • 手把手教你用Python爬中國電影票房數據
    DataFrame:DataFrame可以簡單理解為Excel裡的表格格式。掌握for函數,可以說是真正入門了Python函數。for函數在書寫Python爬蟲中經常被應用,因為爬蟲經常需要遍歷每一個網頁,以獲取信息,所以構建完整而正確的網頁連結十分關鍵。以某票房數據網為例,他的網站信息長這樣:
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是根據網頁地址(URL)爬取網頁上的內容,這裡說的網頁地址(URL)就是我們在瀏覽器中輸入的網站連結。例如:https://www.baidu.com/,這就是一個URL。
  • python能做什麼
    python能做什麼?書聲琅琅Python培訓老師介紹,最近許多的朋友諮詢,聽說python很火,甚至可以超越JAVA,因此很想學這個python,但是不知道python能做什麼,能完成一些什麼項目呢?針對這個問題,今天徐老師跟大家來聊一聊python能做什麼的話題。
  • Python 爬蟲實踐:《戰狼2》豆瓣影評分析
    其實,最簡單的辦法是我們可以打開我們爬取網頁的html代碼,然後查看我們需要的數據在哪個html標籤裡面,再進行讀取就可以了。如下圖所示:好的,至此我們已經爬取了豆瓣最近播放電影的評論數據,接下來就要對數據進行清洗和詞雲顯示了。
  • 我爬取了6萬條《重啟》的評論,發現了這些秘密
    今天小編就帶領大家來爬取一下大家對這部劇的評論,看一下大家是如何看待這部電視劇的。 1 數據的抓取首先是對於數據的抓取,小編獲取的是愛奇藝下每集電視劇中,觀影者對於該集的評價,小編爬取了前五集的一共6萬條評論。
  • 付費的知識星球要過期了,python 教你怎麼辦
    python 爬蟲的常用技巧總結,帶你輕鬆入門,今天補上一篇實戰指南,爬取知識星球裡某個星球的所有數據,對,你沒有聽錯,是所有數據,包括了內容、問答、評論、圖片、文件、甚至是誰點了贊!當然,本篇文章需要你有一點 python 基礎,如果沒有的話,建議你先收藏,去找一些教程學習一下這門工具人語言。好了,廢話不多說,馬上開始。首先,導入所需要的包:
  • 2021年B站漲粉第一人?王冰冰吸粉150萬,會是下一個papi醬嗎?
    發布僅15小時,達成百萬粉絲勳章;24小時不到,單條視頻播放破600萬,彈幕+評論超過20萬,獲贊111多萬,所有數據還在持續增長…b站2021年第一個刷爆全站的視頻,居然是央視記者王冰冰駐站@吃花椒的喵醬的第一個vlog。
  • 使用Python+OpenCV進行面部合成
    原文 http://www.learnopencv.com/face-morph-using-opencv-cpp-python/