仅作例子参考,选取了某站排行榜前十名视频的基础数据和弹幕内容制作可视化图表。
按照使用的工具共分为三个部分:数据获取部分(Python)+数据存储(MySQL)+数据可视化(Tableau),本篇笔记是前两部分的数据准备阶段。
一,数据准备阶段
- 首先拿到排行榜页面的url(准确说是找到API,不要傻傻复制网页链接),还有请求头,同一页F12刷新
- 使用requests,get网页详细信息:r=requests.get(url,headers=headers)
- 然后查看json格式的网页内容:js=r.json()
- [list]下有多个字典,是排行榜中每个视频的详细信息,按照排名顺序排列,找到所需信息的位置提取出来即可,例如视频标题和up主:
- title=['data']['list'][0]['title'] #0表示数组list[ ]下的第一个字典
- name=['data']['list'][0]['owner']['name']
- 写起来很麻烦,尤其需要提取多个视频的多个数据时,先把list提出来:list=['data']['list']
- 再使用for循环依次提取列表中前十个视频数据:for i in range(10)
-
这一段的代码如下:
import requests import json #全站热门榜单url top10_url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all&jsonp=jsonp' top10_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'} #获取全站前十名榜单 r = requests.get(top10_url, headers=top10_headers) js = r.json() list = js['data']['list'] for i in range(10): title = list[i]['title'] cid = list[i]['cid'] tag = list[i]['tname'] name = list[i]['owner']['name'] view = list[i]['stat']['view'] dm_num = list[i]['stat']['danmaku'] reply = list[i]['stat']['reply'] favorite = list[i]['stat']['favorite'] coin = list[i]['stat']['coin'] share = list[i]['stat']['share'] like = list[i]['stat']['like'] rank_num = i+1
-
可以print()看结果
-
接下来获取弹幕文本和发送弹幕的时间,为制作词云图和峰值图做准备
-
某站提供了获取弹幕数据的api(当前日期起前5000条弹幕,oid就是cid,可替换别的视频)
-
直接在浏览器访问会发现得到了一串参数和弹幕文本(xml格式)
弹幕xml参数意义 第一个参数是弹幕出现的时间 以秒数为单位。 第二个参数是弹幕的模式1..3 滚动弹幕 4底端弹幕 5顶端弹幕 6.逆向弹幕 7精准定位 8高级弹幕 第三个参数是字号, 12非常小,16特小,18小,25中,36大,45很大,64特别大 第四个参数是字体的颜色 以HTML颜色的十位数为准 第五个参数是Unix格式的时间戳。基准时间为 1970-1-1 08:00:00 第六个参数是弹幕池 0普通池 1字幕池 2特殊池 【目前特殊池为高级弹幕专用】 第七个参数是发送者的ID,用于“屏蔽此弹幕的发送者”功能 第八个参数是弹幕在弹幕数据库中rowID 用于“历史弹幕”功能
- 这里我们需要拿到的是弹幕文本和第一个参数(弹幕在视频中出现的时间),这次需要用到beautifulsoup
- 弹幕文本:
dm_url = "https://api.bilibili.com/x/v1/dm/list.so?oid=169317052" response = requests.get(dm_url, headers=dm_headers) bs = B