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主》51180 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主》51179 rows × 5 columns
可視化展示用的的工具是pyecharts,可以參考快速掌握數據可視化工具pyecharts
點讚TOP20df1 = 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: int64from 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主》51180 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主》51179 rows × 5 columns
可視化展示用的的工具是pyecharts,可以參考快速掌握數據可視化工具pyecharts
點讚TOP20df1 = 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: int64from 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到這裡就結束了,如果對你有幫助你,歡迎點讚關注,你的點讚對我很重要