B站弹幕爬取并制成词云

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.csdn.net/xtreallydance/article/details/113071324
Python爬取B站弹幕方法介绍
https://blog.csdn.net/qq_42582489/article/details/107800766

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页