python b站日排行榜_bilibili弹幕网视频日排行榜数据分析

本文介绍了如何使用Python爬取B站视频日排行榜数据,并进行数据分析和可视化。通过网络爬虫获取HTML源码,提取关键信息如播放量、弹幕数、综合得分等,并使用pandas进行数据清洗,最后通过matplotlib进行数据可视化,包括直方图和散点图,发现播放量与综合得分的相关性较高。
摘要由CSDN通过智能技术生成

网络爬虫名称:bilibili弹幕网视频日排行榜数据分析

网络爬虫爬取的内容:bilibili弹幕网视频日排行榜

设计方案概述:

实现思路:爬取网站html源代码,通过页面分析得到想要的数据位置,提取数据,之后数据可视化等操作

技术难点: html源码过于杂乱,难以提取数据

首先进行页面分析

53860483732a8fe57ddb881189c898e0.png

通过页面分析,我们得知我们需要的关键数据在"li"分支

将"li"分支展开,进一步分析

1b0e5076bd58cb26499735199bdc9098.png

4eb2e3145c0fc7ac11ae6f5f064cf69c.png

2cee830a8f346e51c8f368a89d5c8128.png

52be75ed71cbf5dfbcb947ef1c517f58.png

9b3b92bfb73b528dbd7a10911b155b44.png

通过对"li"分支的分析,我们基本确定了播放量,弹幕数,综合得分等关键信息所在的位置

接下来开始爬取

importrequests as rqfrom bs4 importBeautifulSoupimportpandas as pdimportmatplotlib.pyplot as plt

url= "https://www.bilibili.com/ranking/all/0/0/1"header= {"User-Agent":"Mozilla/5.0"}

res= rq.get(url,headers=header,timeout=15)

res.raise_for_status()

res.encoding=res.apparent_encoding

soup= BeautifulSoup(res.text)

使用requests库爬取,并通过BeautifulSoup库存放到变量Soup中,这里展示一下爬取到的html,可以看到是非常杂乱的

fa6751afb3ba708e1e1774d73856d62f.png

然后开始对数据进行提取,首先是获取视频标题,同样的,我输出一下提取到的标题

#获取视频标题

title =[]for dtitle in soup.find_all('img'):

title.append(dtitle.get('alt'))

df28835d4b590bfb2a73f08b35f77af6.png

接下来同理,提取一些关键信息,因数据略大,就不输出展示了

#获取视频的播放量,弹幕数和UP主

cl_soup=soup.find_all(attrs={'class':'data-box'})

play_view_author=[]for cl_soup incl_soup:

play_view_author.append(cl_soup.text)

play= play_view_author[0:300:3] #播放量

view = play_view_author[1:300:3] #弹幕数

author = play_view_author[2:300:3] #UP主#获取视频的BV号

dBV = soup.find_all(attrs={'class':'title'})

link=[]for dBV indBV:

link.append(dBV.get('href'))for i inrange(link.count(None)):

link.remove(None)

BV=[]for k inrange(len(link)):

BV.append(link[k][-12:])#获取视频的综合得分

soup_pts=soup.find_all(attrs={'class':'pts'})

pts=[]for soup_pts insoup_pts:

pts.append(eval(soup_pts.text[:-15]))

好的,现在关键信息已经获取完成,将其通过pandas库保存为csv表格方便稍后进行数据分析可视化调用

dt = {'排名':range(1,101),'标题':title,'播放量':play,'弹幕数':view,'综合得分':pts,'UP主':author,'BV号':BV} #创建字典

data = pd.DataFrame(dt) #以字典形式创建DataFrame

importdatetime

date= datetime.datetime.now().strftime('%Y-%m-%d') #获取当前日期方便保存

data.to_csv('{}.csv'.format(date),index=False,header=True,encoding="utf-8-sig",mode="a") #保存为csv

此处应该注意,这里的保存时一定要写编码方式,否则很有可能保存的csv出现乱码的现象

接下来对数据进行清洗并可视化分析

读入csv文件

importpandas as pdimportmatplotlib.pyplot as pltfrom scipy.o

Python爬虫获取B站弹幕数据分析可以分为以下几个步骤: 1. 获取B站视频的cid,可以通过视频页面的URL来获取,例如视频页面的URL为:https://www.bilibili.com/video/BV1QK4y1d7dK,则cid为BV1QK4y1d7dK。 2. 使用B站提供的弹幕API获取弹幕数据,可以使用requests库发送请求,然后解析返回的XML数据,获取弹幕文本内容和发送时间等信息。 3. 将弹幕数据保存到本地文件或数据库中,可以使用csv、json、sqlite等格式进行存储。 4. 数据分析和可视化,可以使用pandas、matplotlib、seaborn等库进行数据分析和可视化,例如统计弹幕数量和分布、分析弹幕关键词等。 下面是一份获取B站视频弹幕并进行数据分析的示例代码: ```python import requests from bs4 import BeautifulSoup import xml.etree.ElementTree as ET import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 获取视频cid url = 'https://www.bilibili.com/video/BV1QK4y1d7dK' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') cid = soup.find('meta', {'itemprop': 'videoId'})['content'] # 获取弹幕数据 danmu_url = f'https://api.bilibili.com/x/v1/dm/list.so?oid={cid}' response = requests.get(danmu_url) xml_data = response.content.decode('utf-8-sig') xml_root = ET.fromstring(xml_data) danmu_list = [] for danmu in xml_root.iter('d'): danmu_attr = danmu.attrib['p'].split(',') danmu_list.append({ 'time': float(danmu_attr[0]), 'mode': int(danmu_attr[1]), 'color': int(danmu_attr[3]), 'text': danmu.text.strip() }) # 保存弹幕数据到csv文件中 df = pd.DataFrame(danmu_list) df.to_csv('danmu.csv', index=False, encoding='utf-8-sig') # 数据分析和可视化 df['datetime'] = pd.to_datetime(df['time'], unit='s') df['date'] = df['datetime'].dt.date df['hour'] = df['datetime'].dt.hour df['minute'] = df['datetime'].dt.minute df['second'] = df['datetime'].dt.second df['count'] = 1 # 统计弹幕数量和分布 danmu_count = df.groupby('date')['count'].sum() danmu_count.plot(kind='line', title='B站弹幕数量趋势', figsize=(8, 4)) plt.show() danmu_hour_count = df.groupby('hour')['count'].sum() danmu_hour_count.plot(kind='bar', title='B站弹幕小时分布', figsize=(8, 4)) plt.show() # 分析弹幕关键词 from jieba.analyse import extract_tags keywords = extract_tags(df['text'].str.cat(sep=' '), topK=20, withWeight=True) df_keywords = pd.DataFrame(keywords, columns=['keyword', 'weight']) sns.barplot(x='weight', y='keyword', data=df_keywords) plt.title('B站弹幕关键词分析') plt.show() ``` 以上代码可以获取B站视频弹幕数据,并对弹幕数据进行数量和分布统计、关键词分析等操作,并使用pandas、matplotlib和seaborn等库进行数据分析和可视化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值