# 基于python实现的Bilibili弹幕检索系统
# 一、概述
首先是完成信息分析与设计的作业,该作业需要完成一个检索系统。
我完成的是一个弹幕检索系统,而对于一个检索系统而言,首先是对于数据的获取,这部分通常使用爬虫进行抓取,事实上,如果Bilibili能够提供更好的api,显然是更容易的,但是还是习惯于传统的爬取工作,因此本项目是B站的爬虫系统。
# 二、前言
由于B站视频数量比较多,涉及的范围也比较广,不同的视频类型之间有不同是弹幕风格。
为了进一步的细化题目,并且分析自己相对比较了解的部分。本文主要抓取了[snh48-黄婷婷](http://weibo.com/u/3668822213)相关,可能会进一步的包括SNH48 TEAM NII的部分。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d1114b006139eadd7cd45e2745d577a6.writebug)
由于整个项目是大学四年的一次大作业,我相对比较重视,因此,整个系统的设计和系统的一些完成工作是十分重要的。
# 三、爬虫部分
## 3.1 检索字段
http://search.bilibili.com/
Bilibili的检索关键词字段包括
```html
<li data-value="all">综合</li>
<li data-value="video">视频</li>
<li data-value="bangumi">番剧</li>
<li data-value="tvplay">影视</li>
<li data-value="live">直播</li>
<li data-value="special">专题</li>
<li data-value="topic">话题</li>
<li data-value="upuser">UP主</li>
<li data-value="drawyoo">画友</li>
```
由此可以看出,如果检索字段包括多个部分,如综合,视频等,可以检索不同的字段。因此除了综合检索外,为了检索的完全性,我还使用了专题和话题集合的方式进行抓取。
例如:
http://www.bilibili.com/sp/%E9%BB%84%E5%A9%B7%E5%A9%B7
其包含了视频中包含TAG的href,然后将这个href放到需要抓取的url表中:
```SQL
INSERT IGNORE INTO need_crawl_url(aid,url,create_time) SELECT aid,video_url,crawler_time FROM query_table;
```
然后```python run_spider.py```便能够实现第一轮抓取,进一步的将人工筛选的query_tag进行query进一步得到query_table的数据,然后再将query_table放到need_crawl_url的表中,再启动爬虫,从need_crawl_url中抓取。可以循环进行,但是在本次项目中,最后的部分,应该包括如下:
- **sp**:黄婷婷
- **query_word**:黄婷婷
- **query_word**:人工筛选其他的表达黄婷婷的单词
进一步的我为了补充一些多一点的数据,抓了一些"snh48"和"李艺彤"tags的数据和其检索结果的数据。
事实上,可以关于SP,在bilibili的sitemap里有大量的涉及。将其抽取出来可以发现。
http://www.bilibili.com/sitemap/sp.xml
其涉及了大概3072个sp,我大概看了一下,确实和SNH48相关的不多,也就包括SNH48-汤敏、SNH48、SNH48-赵嘉敏、SNHELLO、黄婷婷、李艺彤。(2016年11月24日数据)
## 3.2 视频数据
事实上,开始的抓取的部分是没有视频的元数据的,而只有UCG的数据。这对于项目而言有巨大的打击。
因此我需要包含我抓取的视频的元数据的信息,这个部分是需要进行解析地址的。
而我参看了[哔哩哔哩真实视频地址解析-初探](#citation)和[you-get](#citation)的bilibili部分,使用了其包含的APPKEY和编码方法。
大体上获取了元数据的信息(PS:由于视频太多太大,遂放弃了把视频保存下来的想法,内存还是要钱的=\_=)。timelength是该元素最重要的信息,是以0.001s为单位的时间信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/dcc88fbe6cb37fc9deb546a5532197d7.writebug)
## 3.3 爬虫思路
写一个获取要抓取的url列表,放在数据库中。
scrapy爬虫从数据库中读取需要抓取的url,并且将这个url放到start_urls列表中,开始抓取。
定期轮训数据库,然后得到需要抓取的url,保持抓取。
## 3.4 爬虫框架
本次爬虫的部分的框架Scrapy图为:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e214d72089894ca70ae7837c4fe4d8b8.writebug)
而在我的具体的实现的过程中。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/62b7b082fc23c62666c18121babb7cc2.writebug)
## 3.5 url列表的获取办法
- query
- 基于up主
- 基于排行榜
- 其他
## 3.6 数据库结构
```SQL
create database XFS_DB charset=utf8;
create table query_table(
aid int primary key,
query_word char(100) not null,
page_num int,
video_url varchar(1000),
crawler_time int,
video_matrix varchar(10000)
) charset=utf8;
create table need_crawl_url(
aid int primary key,
url varchar(1000),
create_time int,
finished_time int default 0
)charset=utf8;
```
# 四、数据分析
首先需要对于xml文件进行一定程度的解读:
```
<?xml version="1.0" encoding="UTF-8"?>
<i><chatserver>chat.bilibili.com</chatserver><chatid>9728464</chatid><mission>0</mission><maxlimit>1000</maxlimit><source>e-r</source><ds>2367399877</ds><de>2367399877</de><max_count>1000</max_count>
<d p="241.298,5,25,16707842,1472831971,0,5d2ce950,2367399877">啊黄的泪颜我来承包</d>
</i>
```
在上述的例子中,根据相关网站[弹幕信息](#citation)。
<d>标签确定了一个弹幕信息,text部分显然是数据。
- 第一项是弹幕所在时间,单位为秒
- 第二项是弹幕类型,其中:
- 1~3 为滚动弹幕
- 4 为底端弹幕
- 5 为顶端弹幕
- 6 为逆向弹幕
- 7 为精确弹幕
- 8 为高级弹幕。
- 第三项是弹幕字体大小,其中 25 为中,18 为小
- 第四项是弹幕颜色,格式是十进制的 RGB 颜色
- 第五项是弹幕的发送时间,使用的是 Unix 时间戳
- 第六项是弹幕池,其中 0 为普通弹幕,1 为字幕弹幕,2 为特殊弹幕
- 第七项是发送者的 ID 的 CRC32b 加密,可以用来屏蔽发送者
- 第八项是弹幕在数据库的 ID ,可能是用于历史弹幕
有上面的解析,可以看出,讨论分析的部分包括:弹幕随着视频出现的时间的分布情况,弹幕类型的占比情况,颜色,发送的时间相比视频的上传时间等分析。
## 4.1 统计信息
```sql
select aid,count(*),startDate,author,view,danmaku,reply,favorite,coin,share from video_info group by aid into outfile "f:\\data.txt" FIELDS TERMINATED BY ',';
```
使用sql语句导出必要的数据统计文件,进行SPSS和python数据分析包pandas的分析。大体上回答了以下的问题:
- 有多少个视频,视频的时间的长度?
- 这些视频的子视频划分情况?
- 这些视频的UP主的信息是怎么样的?
- 大部分的UP主都是少量UP视频,明星up主列表如下(黄色是我关注的=\_=):
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b7607efd78bb8c3f8872c5940b6f86d4.writebug)
- 这些视频的view、danmaku、reply、favorite、coin、share的情况是怎么样的分布?是否有相关性?
- 长尾分布,这个和互联网本身的特点非常相关
- up时间?
弹幕的分布情况,类型,颜色。
其他的扩展:
- 弹幕的文本分析,朴素贝叶斯分类器
- 弹幕文本情感识别 (需要相关语料信息)
- 暂时未完成
## 4.2 可视化
可视化系统除了必要的数据的展示外,重要的是数据的过滤,这个过程是非常重要的。
> The main goal of data visualization is its ability to visualize data, communicating information clearly and effectivelty. It doesn’t mean that data visualization needs to look boring to be functional or extremely sophisticated to look beautiful. To convey ideas effectively, both aesthetic form and functionality need to go hand in hand, providing insights into a rather sparse and complex data set by communicating its key-aspects in a more intuitive way. Yet designers often tend to
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
精选_基于python实现的Bilibili弹幕检索系统_源码打包 (379个子文件)
scrapy.cfg 260B
app2.css 155KB
app.css 155KB
bootstrap.css 143KB
dc.css 5KB
8150643.csv 766KB
8150643.csv 766KB
stopword.dic 13KB
glyphicons-halflings-regular.eot 20KB
.gitignore 198B
d3.js 440KB
dc.js 340KB
d3.js 330KB
jquery.js 261KB
jquery.js 261KB
jquery.slim.js 209KB
jquery.slim.js 209KB
d3.min.js 209KB
jquery.min.js 85KB
jquery.min.js 85KB
bootstrap.js 68KB
jquery.slim.min.js 68KB
jquery.slim.min.js 68KB
sizzle.js 64KB
sizzle.js 64KB
crossfilter.js 43KB
bootstrap.min.js 36KB
ajax.js 22KB
ajax.js 22KB
sizzle.min.js 19KB
sizzle.min.js 19KB
event.js 19KB
event.js 19KB
colorbrewer.js 18KB
effects.js 17KB
effects.js 17KB
tooltip.js 16KB
manipulation.js 12KB
manipulation.js 12KB
css.js 11KB
css.js 11KB
core.js 11KB
core.js 11KB
core.js 11KB
core.js 11KB
deferred.js 10KB
deferred.js 10KB
modal.js 10KB
carousel.js 7KB
selector-native.js 6KB
selector-native.js 6KB
offset.js 6KB
offset.js 6KB
collapse.js 6KB
callbacks.js 5KB
callbacks.js 5KB
trigger.js 5KB
trigger.js 5KB
affix.js 5KB
dropdown.js 5KB
scrollspy.js 5KB
xhr.js 4KB
xhr.js 4KB
data.js 4KB
data.js 4KB
classes.js 4KB
classes.js 4KB
val.js 4KB
val.js 4KB
traversing.js 4KB
traversing.js 4KB
Data.js 4KB
Data.js 4KB
tab.js 4KB
button.js 4KB
init.js 3KB
init.js 3KB
Tween.js 3KB
Tween.js 3KB
attr.js 3KB
attr.js 3KB
serialize.js 3KB
serialize.js 3KB
popover.js 3KB
queue.js 3KB
queue.js 3KB
prop.js 3KB
prop.js 3KB
jsonp.js 3KB
jsonp.js 3KB
findFilter.js 3KB
findFilter.js 3KB
buildFragment.js 2KB
buildFragment.js 2KB
support.js 2KB
support.js 2KB
ready-no-deferred.js 2KB
ready-no-deferred.js 2KB
showHide.js 2KB
showHide.js 2KB
共 379 条
- 1
- 2
- 3
- 4
资源评论
工具盒子
- 粉丝: 58
- 资源: 1313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功