B站弹幕爬取并制成词云
前言
作为一个经济学学生,数据分析和可视化是一定要掌握的,从今天开始进行一些Python项目的记录,就不进行Python基础知识的讲解了!
一、B站弹幕的爬取
弹幕地址获取
import re
import requests
import urllib
import bs4
def main():
url = "你要爬的视频的地址"
datalist = get_html(url)
cid = saveurl(datalist)
dmurl='https://comment.bilibili.com/'+cid+'.xml'
print('请点击此网站:',dmurl)#获取视频的接口
def get_html(url):
headers = {
'User-Agent': '你个人的user-agent'
} #请输入你个人的User-Agent
response = requests.get(url, headers=headers)
return response.text
def saveurl(baseurl):
findlink=re.compile(r'"cid":(.*?),"bvid":')
cid = re.findall(findlink,baseurl)
cid = list(cid)[1]
return cid
if __name__ =="__main__":
main()
print("爬取完毕") # 这里是输出你要爬取视频的弹幕地址
以Python爬取弹幕有四种方法:
1.传统 BeautifulSoup 操作
2.基于 BeautifulSoup 的 CSS 选择器(与 PyQuery 类似)
3.XPath
4.正则表达式,我这里只演示xpath
这里我就不一一展示了,感兴趣的可以自己百度一下,这里我展示的是xpath方式爬取。
import requests
from lxml import etree
url ='https://comment.bilibili.com/189151011.xml'
headers = {'user-agent':'自己的user-agent'}
r = requests.get(url = url, headers = headers).content#这里是content不是text(我说怎么爬不出来)这里是编码问题,感兴趣的可以百度一下。
tree = etree.HTML(r)
d_list = tree.xpath('//d')
file = open('你想取的文件名.text','w',encoding='utf-8')# 注意是.text和utf-8,不然后面词云制作时会出错
for d in d_list:
title = d.xpath('./text()')[0]
print(title)
file.write(title+'/n')# 将弹幕写入文件里,并且每条弹幕占一行。
二、词云的实现
词云需要停用词文本,可以上百度搜来直接用,也可以自定义。# 停用词即你想删掉的词语
import jieba # 分词
from wordcloud import WordCloud # 词云
from PIL import Image # 图片处理
import numpy as np # 图片处理
import matplotlib.pyplot as plt # 画图
# 读取停用词库,注意编码应为‘utf8’
f = open('你的停用词.text', encoding='utf8')
stopwords = f.read().split('\n')
print(stopwords) # 打印停用词
f.close() # 关闭停用词文件(・。・)
with open("你想取的文件名.text", "r", encoding='utf8') as fp:
text = fp.read()
segs = jieba.cut(text) # 进行jieba分词
mytext_list = [] # 构建一个容纳过滤掉停用词的弹幕数据文件
# 文本清洗
for seg in segs: # 循环遍历每一个分词文本
# 如果该词不属于停用词表 并且非空 长度不为1
if seg not in stopwords and seg != "" and len(seg) != 1:
# 将该词语添加到mytext_list列表中
mytext_list.append(seg.replace(" ", ""))
print(mytext_list) # 打印过滤后的弹幕数据
cloud_text = ",".join(mytext_list) # 连接列表里面的词语
print(cloud_text)
plt.figure() # 图形窗口
mask = plt.imread('1.jpg') # 导入你想导入的图形蒙版,这里我导入了但好像没用,请大神指名!
wc = WordCloud(
background_color="white", # 背景颜色
max_words=200, # 显示最大次数
font_path=r'C:/Windows/Fonts/STXINGKA.TTF', # 字体
width=400, # 宽
height=200, # 高
mask=mask,
scale=10).generate(cloud_text) # 迭代生成词云
wc.to_file("我的第一个词云.png")
plt.imshow(wc, interpolation="bilinear") # 插值为双线性,会使显示平滑更加平滑
plt.axis("off") # 坐标轴隐藏
plt.show()
print("成功!")
最后,不出意外的话你的词云就大功告成了!
总结
1.学习的时候要多问多查,不要放弃!
2.不要太心急,循序渐进,不然很容易被劝退!
参考:
Python自动化爬取b站实时弹幕并制作WordCloud词云
https://blog.youkuaiyun.com/xtreallydance/article/details/113071324
Python爬取B站弹幕方法介绍
https://blog.youkuaiyun.com/qq_42582489/article/details/107800766