Python爬取 冰冰 第一條B站視頻的千條評論,繪制詞云圖,看看大家說了什么吧
醬醬醬,那就開始吧
![]() |
![]() |
文章目錄
- 資料收集
- 獲取介面
- 查看資料
- 決議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在線決議中查看
資料分析
資料獲取后,就可以開始初步的資料分析了
import pandas as pd
data = pd.read_excel(r"bingbing.xlsx")
data.head()
用戶 | 性別 | 等級 | 評論 | 點贊 | |
---|---|---|---|---|---|
0 | 食貧道 | 男 | 6 | [呆][呆][呆]你來了嘿! | 158457 |
1 | 畢導THU | 男 | 6 | 我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼 | 148439 |
2 | 老師好我叫何同學 | 男 | 6 | [熱詞系列_知識增加] | 89634 |
3 | 央視網快看 | 保密 | 6 | 冰冰來了!我們要失業了嗎[doge][doge] | 118370 |
4 | 廈門大學 | 保密 | 5 | 哇歡迎冰冰!!! | 66196 |
原文鏈接
資料描述
data.describe()
等級 | 點贊 | |
---|---|---|
count | 1180.000000 | 1180.000000 |
mean | 4.481356 | 2200.617797 |
std | 1.041379 | 10872.524850 |
min | 2.000000 | 1.000000 |
25% | 4.000000 | 4.000000 |
50% | 5.000000 | 9.000000 |
75% | 5.000000 | 203.750000 |
max | 6.000000 | 158457.000000 |
洗掉空值
data.dropna()
用戶 | 性別 | 等級 | 評論 | 點贊 | |
---|---|---|---|---|---|
0 | 食貧道 | 男 | 6 | [呆][呆][呆]你來了嘿! | 158457 |
1 | 畢導THU | 男 | 6 | 我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼 | 148439 |
2 | 老師好我叫何同學 | 男 | 6 | [熱詞系列_知識增加] | 89634 |
3 | 央視網快看 | 保密 | 6 | 冰冰來了!我們要失業了嗎[doge][doge] | 118370 |
4 | 廈門大學 | 保密 | 5 | 哇歡迎冰冰!!! | 66196 |
... | ... | ... | ... | ... | ... |
1175 | 黑旗魚 | 保密 | 5 | 11小時一百萬,好快[驚訝] | 5 |
1176 | 是你的益達哦 | 男 | 6 | 冰冰粉絲上漲速度:11小時107.3萬,平均每小時上漲9.75萬,每分鐘上漲1625,每秒鐘... | 5 |
1177 | 快樂風男崔斯特 | 男 | 4 | 軍訓的時候去了趟廁所,出來忘記是哪個隊伍了,看了up的視頻才想起來,是三連[doge][滑稽] | 5 |
1178 | 很認真的大熊 | 男 | 5 | 我覺得冰冰主持春晚應該問題不大吧,[OK] | 5 |
1179 | 飛拖鞋呀吼 | 保密 | 5 | 《論一個2級號如何在2020年最后一天成為百大up主》 | 5 |
1180 rows × 5 columns
洗掉重復值
data.drop_duplicates()
用戶 | 性別 | 等級 | 評論 | 點贊 | |
---|---|---|---|---|---|
0 | 食貧道 | 男 | 6 | [呆][呆][呆]你來了嘿! | 158457 |
1 | 畢導THU | 男 | 6 | 我是冰冰僅有的3個關注之一[tv_doge]我和冰冰貼貼 | 148439 |
2 | 老師好我叫何同學 | 男 | 6 | [熱詞系列_知識增加] | 89634 |
3 | 央視網快看 | 保密 | 6 | 冰冰來了!我們要失業了嗎[doge][doge] | 118370 |
4 | 廈門大學 | 保密 | 5 | 哇歡迎冰冰!!! | 66196 |
... | ... | ... | ... | ... | ... |
1175 | 黑旗魚 | 保密 | 5 | 11小時一百萬,好快[驚訝] | 5 |
1176 | 是你的益達哦 | 男 | 6 | 冰冰粉絲上漲速度:11小時107.3萬,平均每小時上漲9.75萬,每分鐘上漲1625,每秒鐘... | 5 |
1177 | 快樂風男崔斯特 | 男 | 4 | 軍訓的時候去了趟廁所,出來忘記是哪個隊伍了,看了up的視頻才想起來,是三連[doge][滑稽] | 5 |
1178 | 很認真的大熊 | 男 | 5 | 我覺得冰冰主持春晚應該問題不大吧,[OK] | 5 |
1179 | 飛拖鞋呀吼 | 保密 | 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網路爬蟲有了了解,希望大家動手實踐,筆者能力有限,有更多有趣的發現,歡迎私信或留言
推薦閱讀:
- 冰冰B站視頻彈幕爬取原理決議
- Python建立時間序列ARIMA模型實戰案例
- 使用xpath爬取資料
- jupyter notebook使用
- BeautifulSoup爬取豆瓣電影Top250
- 一篇文章帶你掌握requests模塊
- Python網路爬蟲基礎–BeautifulSoup
到這里就結束了,如果對你有幫助你,歡迎點贊關注,你的點贊對我很重要
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/245810.html
標籤:python