周杰伦yyds!!!!!!!!!!!
周杰伦yyds!!!!!!!!!!!
前几天学习了csdn榜一的EDG夺冠弹幕爬取以及词云图的制作,今天心血来潮就来举一反三爬取b站周杰伦《可爱女人》的弹幕制作词云图。
打开b站搜索周杰伦,选取点击最多
进入视频
“亚洲流行音乐之王”映入眼帘
接下来让我们把这些弹幕爬下来
右击鼠标,选择检查
点击“网络”
然后刷新浏览器界面
接下来只要找到弹幕的网络接口就好啦!
但是现在b站已经很难找到网络接口了
不过我们可以用以前的API: https://api.bilibili.com/x/v1/dm/list.so?oid=XXX
每一个视频都对应一个oid哦,所以现在我们需要找到oid
怎么找到oid呢?点开视频右端的弹幕列表,点击打开历史弹幕
然后在筛选器里输入history
点击下方第一个url文件并拖至最底端
所以我们要找的oid=2154848
所以API为 https://api.bilibili.com/x/v1/dm/list.so?oid=2154848
打开这个网站试试看
是我们想要的弹幕
API找到了,接下来开始爬取并且保存
import re
import requests
url="https://api.bilibili.com/x/v1/dm/list.so?oid=2154848"
res=requests.get(url)
res.encoding=res.apparent_encoding
ResText=res.text
pattern=re.compile(r'<d.*?>(.*?)</d>')##运用正则表达式
data=pattern.findall(ResText)
# 保存数据
with open("《可爱女人》弹幕.txt",mode="a",encoding="utf-8") as f:
for i in data:
f.write(i)
f.write("\n")
成功爬取并保存。(是不是很简单)
接下来以下面这张图片制作词云图
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 10 08:51:02 2021
@author: asus
"""
# 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")
# 注意:动态添加词语集
for i in ["周杰伦","华语乐坛第一人","亚洲流行音乐之王","还有谁","地表最强"]:
jieba.add_word(i)
# 2 读取文本文件,并使用lcut()方法进行分词
with open("《可爱女人》弹幕.txt",encoding="utf-8") as f:
txt = f.read()
txt = txt.split()
txt = [i.upper() for i in txt]
data_cut = [jieba.lcut(x) for x in txt]
# 3 读取停用词
with open("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("zjl.jpg")
# 2)设置词云参数
wc = WordCloud(font_path="simhei.ttf",
background_color="white",
max_words=1000,
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("周杰伦词云.png")
然后等一小会~