200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 听说B站难倒了百分之99的新手?教你用Python从零开始搞定B站!

听说B站难倒了百分之99的新手?教你用Python从零开始搞定B站!

时间:2023-06-13 22:56:30

相关推荐

听说B站难倒了百分之99的新手?教你用Python从零开始搞定B站!

现在大家的生活中,已经越来越离不开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(纯技术交流和资源共享,广告勿入)以自助拿走

点击这里 领取

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。