文章目录
前言
继续记录学习
提示:以下是本篇文章正文内容,下面案例可供参考
一、指定视频点赞
原作者的代码如下
import asyncio
from bilibili_api import video, Credential
SESSDATA = ""
BILI_JCT = ""
BUVID3 = ""
async def main():
# 实例化 Credential 类
credential = Credential(sessdata=SESSDATA, bili_jct=BILI_JCT, buvid3=BUVID3)
# 实例化 Video 类
v = video.Video(bvid="BVxxxxxxxx", credential=credential)
# 获取视频信息
info = await v.get_info()
# 打印视频信息
print(info)
# 给视频点赞
await v.like(True)
if __name__ == '__main__':
# 主入口
asyncio.get_event_loop().run_until_complete(main())
上期文章已经讲述了代码中三个值如何获取了
这里就不多说了
同样是异步获取给定特定参数bvid后,就可以给指定视频点赞
经过测试,第一次执行成功点赞,第二次就会提示错误(因为已经点赞过了)
二、视频在线人数监测
from bilibili_api import video
import asyncio
# 实例化
v = video.VideoOnlineMonitor(bvid="BV1AV411x7Gs")
@v.on('ONLINE')
async def on_online_update(event):
"""
在线人数更新
"""
print(event)
@v.on('DANMAKU')
async def on_danmaku(event):
"""
收到实时弹幕
"""
print(event)
if __name__ == '__main__':
# 主入口,v.connect() 为连接服务器
asyncio.get_event_loop().run_until_complete(v.connect())
这个代码经过测试可以直接用
但是会有一定报错提示,并且检测人数与实际出入较大
三、获取视频弹幕
from bilibili_api import video, sync
v = video.Video(bvid='BV1AV411x7Gs')
dms = sync(v.get_danmakus(0))
for dm in dms:
print(dm)
因为b站的bvid的变更加上这里模块已停止维护
显然代码不能直接用,会有诸多error。。
于是我自己搜索众多文章写了一个
#引入需要的库
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
import easygui as g
import json
bvNum = g.enterbox(msg='请输入视频的BV号', title='b站弹幕spider')
#提示输入bv号
myUrl = 'https://api.bilibili.com/x/player/pagelist?bvid=' + bvNum + '&jsonp=jsonp'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
response = requests.get(url = myUrl, headers = headers)
d = json.loads(response.text)
cid = d['data'][0]['cid']
#获取对应视频的cid
# 弹幕保存文件
file_name = '{}.csv'.format(bvNum)
# 获取页面
# cid = 515486397
#由cid得到网页响应xml文件
url = "https://comment.bilibili.com/" + str(cid) + ".xml"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
request = requests.get(url=url, headers=headers)
#print(request.text)
request.encoding = 'utf-8'
# 提取弹幕
soup = BeautifulSoup(request.text, 'lxml')
results = soup.find_all('d')
# 数据处理
data = [data.text for data in results]
# 正则去掉多余的空格和换行
for i in data:
i = re.sub('\s+', '', i)
# 查看数量
print("弹幕数量为:{}".format(len(data)))
# 输出到文件
df = pd.DataFrame(data)
df.to_csv(file_name, index=False, header=None, encoding="utf_8_sig")
print("写入文件成功,文件名为bv号.csv")
四、下载视频
不建议使用