社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用python爬取B站弹幕并绘制词云

初与久歌_4a05 • 3 年前 • 301 次点击  

最近在B站发现一个弹琵琶的小姐姐,真的是人美歌甜啊啊啊,所以打算爬取她的视频来分析弹幕同时制作词云。

查找相关信息之后发现,爬取B站弹幕的API接口有两个,分别是

https://api.bilibili.com/x/v1/dm/list.so?oid=cid
http://comment.bilibili.com/+cid+.xml

后面需要加上需要爬取的视频文件的cid。B站的每个视频都有自己独特的av号,bv号和cid。通过av号和bv号可以确定视频的地址,cid可以确定弹幕文件的地址。

任意打开一个弹幕文件,例如

http://comment.bilibili.com/197603144.xml


我们可以发现弹幕就在这个网页文件中。

  • 获取B站视频的cid
    打开B站,任意找一个视频,右键单击鼠标,点击“检查”。



    打开视频,在右边的Network中找heartbeat文件,其中就有对应的cid(也有aid也就是av号和bvid也就是bv号)。


import imageio as imageio   #加载图片
import requests             #发出请求
import re                   #内置库 用于匹配正则表达式
import csv                  #文件格式
import jieba                #中文分词
import wordcloud            #绘制词云

cid=input('please input a cid:')
#url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+cid
url='http://comment.bilibili.com/'+cid+'.xml'
#获取完整的弹幕文件url
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
}
#请求头,模仿浏览器行为
response = requests.get(url,headers=headers)
# print(response.content.decode('utf-8'))
html_doc = response.content.decode('utf-8')
#把编码转化为utf_8编码
res = re.compile('<d.*?>(.*?)</d>')
#正则表达式匹配弹幕
danmu = re.findall(res,html_doc)
#写入csv文件
for i in danmu:
    with open('b站弹幕.csv','a',newline='',encoding='utf-8-sig') as file:
        writer = csv.writer(file)
        danmu = []
        danmu.append(i)
        writer.writerow(danmu)
# 显示数据
f = open('b站弹幕.csv',encoding='utf-8')
txt = f.read()
print(txt)
f.close()

txt_list = jieba.lcut(txt)    #精确分词
string = ' '.join((txt_list))
img='C:/Users/lenovo/Pictures/20200505101029364.png'
#本地图片
mk = imageio.imread(img)
#控制词云形状的重要参数
w = wordcloud.WordCloud(max_font_size=70,
                        background_color='white',
                        font_path='C:/Windows/SIMLI.TTF',
                        mask=mk,
                        scale=3)
w.generate(string)   #生成词云的关键一步
w.to_file('pycloud.png')



到这里我们成功的找到B站的弹幕文件,同时按照词频生成了词云。关于更加详细的制作词云,也就是jieba库和wordcloud库的知识可以移步这篇文章 https://blog.csdn.net/weixin_46530492/article/details/106832412

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74172
 
301 次点击