成果展示
项目地址
爬取弹幕
可以看我之前写的这篇文章:10行代码下载B站弹幕
下载代码
# download.py
'''依赖模块
pip install requests
'''
import re
import requests
url = input('请输入B站视频链接: ')
res = requests.get(url)
cid = re.findall(r'"cid":(.*?),', res.text)[-1]
url = f'https://comment.bilibili.com/{cid}.xml'
res = requests.get(url)
with open(f'{cid}.xml', 'wb') as f:
f.write(res.content)
样例输入
样例输出
数据处理
下载弹幕文件51816463.xml后,我们打开看一下:
chat.bilibili.com
51816463
0
3000
0
0
k-v
长颈鹿呢?还是大象呢?(
我也不想的,实在是太大了呀
真是深不可测啊
此处省略很多字
可以看到xml文件中d标签的text部分就是弹幕的文本,而d标签的p属性应该是弹幕的相关参数,共有8个,用逗号分隔。
stime: 弹幕出现时间 (s)
mode: 弹幕类型 (< 7 时为普通弹幕)
size: 字号
color: 文字颜色
date: 发送时间戳
pool: 弹幕池ID
author: 发送者ID
dbid: 数据库记录ID(单调递增)
参数详解:
① stime(float):弹幕出现时间,单位是秒;也就是在几秒出现弹幕。
② mode(int):弹幕类型,有8种;小于8为普通弹幕,8是高级弹幕。
1~3:滚动弹幕
4:底端弹幕
6:顶端弹幕
7:逆向弹幕
8:高级弹幕
③ size(int):字号。
12:非常小
16:特小
18:小
25:中
36:大
45:很大
64:特别大
④ color(int):文字颜色;十进制表示的颜色。
⑤ data(int):弹幕发送时间戳。也就是从基准时间1970-1-1 08:00:00开始到发送时间的秒数。
⑥ pool(int):弹幕池ID。
0:普通池
1:字幕池
2:特殊池(高级弹幕专用)
⑦ author(str):发送者ID,用于"屏蔽此发送者的弹幕"的功能。
⑧ dbid(str):弹幕在数据库中的行ID,用于"历史弹幕"功能。
了解弹幕的参数后,我们就将弹幕信息保存为danmus.csv文件:
# processing.py
import re
with open('51816463.xml', encoding='utf-8') as f:
data = f.read()
comments = re.findall('(.*?)', data)
# print(len(comments)) # 300