现在大家的生活中,已经越来越离不开B站了,
的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户。
源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的up主比比皆是。
今天,小编就带领大家来爬取并分析一下B站的最热视频排行榜,看看大家究竟都喜欢看什么样子的视频~~
需求分析
对于榜单的爬取,我们爬取了榜单的top100视频的
排名、标题、视频链接、播放量、弹幕数量、作者、综合得分和作者详情页
等信息。
网页分析
首先我们打开浏览器开发者模式如下,所有的信息我们都可以在右边所在的ul标签之中找到,
所以我们先获页面信息,然后使用xpath来获取这些标签信息。
发送请求
url = '/v/popular/rank/all'headers = {"cookie": "_uuid=7D3DFA6C-6EB1-F72A-632B-C9AF9B9AD4C627183infoc; buvid3=D25672DE-BD2D-4E7C-B79E-DB356316D023167639infoc; sid=aylq5kgg; fingerprint=84acc3579a53d0eba78d769e71574df6; buvid_fp=BA184AFC-F4DC-408A-8897-D0EDEA653CE5148812infoc; buvid_fp_plain=BA184AFC-F4DC-408A-8897-D0EDEA653CE5148812infoc; DedeUserID=434541726; DedeUserID__ckMd5=448fda6ab5098e5e; SESSDATA=78a505c8%2C1643594982%2Cdfa35*81; bili_jct=1d9f4e960fb0ae7fe1de53663029874b; bsource=search_baidu; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(u)YJR~R~)m0J'uYk)ku)~~)","referer": "/","user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.8 Safari/537.36"}resp = requests.get(url, headers = headers, timeout=15)ic(resp.text)
获取浏览器响应信息
接下来我们使用xpath获取标签内部的信息
for li in lis:# 排名sort = li.xpath("./div[@class='num']/text()")sort = ''.join(sort)# 作者author = li.xpath("./div[@class='content']/div[@class='info']/div[@class='detail']/a/span[@class='data-box up-name']/text()")author = ''.join(author).strip()# 综合得分score = li.xpath("./div[@class='content']/div[@class='info']/div[@class='pts']/div/text()")score = ''.join(score)# 视频标题title = li.xpath("./div[@class='content']/div[@class='info']/a[@class='title']/text()")title = ''.join(title)# 视频链接links = li.xpath("./div[@class='content']/div[@class='img']/a/@href")links = ''.join(links).strip()[2:]# 播放数量video_num = li.xpath("./div[@class='content']/div[@class='info']/div[@class='detail']/span[@class='data-box'][1]/text()")video_num = ''.join(video_num).strip()# 弹幕数量barrage_num = li.xpath("./div[@class='content']/div[@class='info']/div[@class='detail']/span[@class='data-box'][2]/text()")barrage_num = ''.join(barrage_num).strip()# 作者详情detail_auth = li.xpath(".//div[@class='content']/div[@class='info']/div[@class='detail']/a/@href")detail_auth = ['https:' + i for i in detail_auth]detail_auth = ''.join(detail_auth)ic(sort, author, score, title,links, video_num, barrage_num, detail_auth)
部分信息如下:
数据保存
接下来我们使用openpyxl模块将获取到的这些信息保存到excel中、
便于后续的数据处理和可视化
ws = op.Workbook()wb = ws.create_sheet(index=0)wb.cell(row=1, column=1, value='排名')wb.cell(row=1, column=2, value='作者')wb.cell(row=1, column=3, value='综合得分')wb.cell(row=1, column=4, value='视频标题')wb.cell(row=1, column=5, value='视频链接')wb.cell(row=1, column=6, value='播放数量')wb.cell(row=1, column=7, value='弹幕数量')wb.cell(row=1, column=8, value='作者详情')ws.save('哔哩哔哩Top100.xlsx')
数据处理
我们在处理数据的时候发现,有些数据的单位格式是不一致的,如下:
有些是个为单位,有些是以万为单位。
并且我们要将数字后面的’万‘字去掉,将字符串格式的数字转为数字类型的才便于后续的可视化操作。
里我们处理数据使用的是pandas,有不明白的小伙伴可以看看这份教程,这个是我自己总结的一份实用性很高的熊猫文档。
# 读取数据df = pd.read_excel('哔哩哔哩Top100.xlsx')# 删除空格pd_data = df.dropna(subset=['播放数量', '弹幕数量'])# 格式化数据播放数量# 去除’万‘pd_data['播放数量'] = pd_data['播放数量'].str.replace('万', '')# 转换格式 万->10000pd_data['弹幕数量'] = pd_data['弹幕数量'].map(lambda x: float(x[:-1]) * 10000 if ('万' in x) else float(x))# 处理后的数据另存为pd_data.to_excel('哔哩哔哩Top101.xlsx')
红色是处理之前的数据
绿色是处理之后的数据
我们已经将字符串类型的数字转换成子类型
并且统一数字单位
接下来我们要找出最多评论的视频和最多弹幕的视频
看看它们为什么这么受欢迎?
# 最多播放max_video_num = rcv_data[rcv_data['播放数量'] == rcv_data['播放数量'].max()]ic(max_video_num)# 最多弹幕max_cmts_num = rcv_data[rcv_data['弹幕数量'] == rcv_data['弹幕数量'].max()]ic(max_cmts_num)'''ic| max_video_num: Unnamed: 0 排名 作者综合得分视频标题 视频链接 播放数量 弹幕数量 作者详情0 0 1 绵羊料理 4742269 一颗柠檬卖100块??美食up主:那是成本! /video/BV1vq4y1Q7TC 445.3 20000 /1805ic| max_bag_num:Unnamed: 0 排名作者综合得分 视频标题 视频链接 播放数量 弹幕数量 作者详情1919 20 爆裂吧叶子 2320837 《B 站 各 等 级 用 户 现 状 !》 /video/BV1t64y1B7Kz 252.7 84000 /24450484'''
这个是播放了最多的视频,
柠檬这么贵是因为小姐姐长得好看么
再来看看弹幕最多的视频
说的啥,大家可以看看,还是相当不错的.
最后我们用的水滴图看一下综合得分占比情况
# 平均数mean_score = rcv_data['综合得分'].mean()# 最大值max_score = rcv_data['综合得分'].max()#ic(mean_score/max_score)'''ic| mean_score/max_score: 0.39690731166873916'''
总结
1. 本文详细介绍了如何用Python爬取B站排行榜Top100并可视化分析
有兴趣的读者可以尝试自己动手练习一下。
2. 本文仅供读者学习使用,不做其他用途!
⑥项目源码案例分享有
如果你用得到的话可以直接拿走,在我的QQ技术交流群里群号:754370353(纯技术交流和资源共享,广告勿入)以自助拿走
点击这里 领取