今天带大家做点好玩的,把B站热门排行榜数据爬下来做个简单的分析。哪种视频最受用户喜欢呢?
环境:
python3.7 + jupyter
第一步:先把B站的数据给爬下来
def crawl():
url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'origin': 'https://www.bilibili.com',
'referer': 'https://www.bilibili.com/',
'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36',
}
try:
resp = requests.get(url=url, headers=headers)
results = resp.json()
except:
return None
return results
第二步:拿到返回结果,做个简单的数据解析,取出你所需的数据。我是把数据存在mysql中,这就不展示了。
def run():
results = crawl()
data = []
for row in results["data"]["list"]:
data.append({
"title": row["title"], # 标题
"tname": row["tname"], # 标签
"name": row["owner"]["name"], # 作者
"short_link": row["short_link"], # 视频地址
"score": row["score"], # 综合得分
"view": row["stat"]["view"], # 播放数
"danmaku": row["stat"]["danmaku"], # 评论数
"his_rank": row["stat"]["his_rank"], # 历史排名
})
return data
第三步:通过pyecharts把数据可视化展示。
"""
通过sql查询想要的数据,做点简单的处理
"""
xaxis_info = {}
yaxis_info = {}
for row in data:
if row["statDate"] in xaxis_info:
xaxis_info[row["statDate"]].append(row["tname"])
else:
xaxis_info[row["statDate"]] = [row["tname"]]
if row["statDate"] in yaxis_info:
yaxis_info[row["statDate"]].append(row["count"])
else:
yaxis_info[row["statDate"]] = [row["count"]]
"""
通过强大的pyecharts把数据渲染成你想要的样子
"""
bar = Bar(init_opts=opts.InitOpts(width='950px'))
bar.add_xaxis(xaxis_info["2021-06-16"])
for r in ["2021-06-15", "2021-06-16"]:
if r == "2021-06-15":
color = "skyblue"
else:
color = "pink"
bar.add_yaxis(r, yaxis_info[r], itemstyle_opts=opts.ItemStyleOpts(color=color))
bar.set_global_opts(
title_opts=opts.TitleOpts(title="bilibili每日排行榜"),
datazoom_opts=opts.DataZoomOpts(),
xaxis_opts=opts.AxisOpts(name_rotate=60, axislabel_opts={"rotate": 90}),
)
bar.render_notebook()
好了,让我们一起来看看最后的效果吧。
通过上图,我们可以清晰的看出,在 2021-06-15 和 2021-06-16 两天中,搞笑类视频进入每日排行榜最多。
由于数据量较小,分析结果仅供娱乐,B站yyds!