B站弹幕爬虫

数据森麟

共 2813字,需浏览 6分钟

 ·

2020-02-03 23:24

b172500154c86dddec6e5c72d97cbf57.webp


     作者:Huangwei AI


     来源:Python与机器学习之路


前言

B站作为弹幕文化的代表,有着非常丰富的弹幕资源。今天我们尝试对B站的弹幕进行爬虫并且绘制词云图展示爬虫结果。

40355658f28f330d7b484449348a3cd2.webp爬虫方式01PART


众所周知,B站的内容非常丰富:


f399a0238a5003a429db35f4f7537c3f.webp


要想找到一个视频中的弹幕,我们其实有很多种方法。


给大家介绍Github上一个B站爬虫数据接口大全:


https://github.com/Vespa314/bilibili-api/blob/master/api.md

在这次爬虫中,我们使用【读取Up视频列表】的方式:


57ebfd70b538465f099327cbb51c9f75.webp

40355658f28f330d7b484449348a3cd2.webp40355658f28f330d7b484449348a3cd2.webp
02PART基本信息


我们选取一位叫做【小时姑娘】的Up主来爬取:


f63ac911d7ef541c24a874af211c3434.webp


注意上面网址中的id=99239148,这是个核心信息。


由于我们是数据接口是列表的形式,所以原则上可以爬取该Up主的所有视频信息。


但是,这次我们专注于一个视频。


f0be682adcb1a78a6fd64300c4ab97b9.webp


没错,就是上面图片中第三个视频,播放量为80.3万的现场版【爱殇】。


这个视频来自于bilibili晚会。弹幕和播放量都够我们爬的。



40355658f28f330d7b484449348a3cd2.webp爬虫代码03PART


我们爬虫的代码主要参考知乎的一个回答:


https://www.zhihu.com/question/56924570/answer/236892766


只需要根据Up主id信息以及视频在列表中位置就可以顺利爬虫:


import requestsimport reimport osimport sysimport json
# B站API详情 https://github.com/Vespa314/bilibili-api/blob/master/api.md
# 视频AV号列表aid_list = []
# 评论用户及其信息info_list = []
# 获取指定UP的所有视频的AV号 mid:用户编号 size:单次拉取数目 page:页数def getAllAVList(mid, size, page): for n in range(1,page+1): url = "http://space.bilibili.com/ajax/member/getSubmitVideos?mid=" + str(mid) + "&pagesize=" + str(size) + "&page=" + str(n) r = requests.get(url) text = r.text json_text = json.loads(text) print (json_text) # 遍历JSON格式信息,获取视频aid for item in json_text["data"]["vlist"]: aid_list.append(item["aid"]) print(aid_list)# 获取一个AV号视频下所有评论 def getAllCommentList(item): url = "http://api.bilibili.com/x/reply?type=1&oid=" + str(item) + "&pn=1&nohot=1&sort=0" r = requests.get(url) numtext = r.text json_text = json.loads(numtext) commentsNum = json_text["data"]["page"]["count"] page = commentsNum // 20 + 1 for n in range(1,page): url = "https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn="+str(n)+"&type=1&oid="+str(item)+"&sort=1&nohot=1" req = requests.get(url) text = req.text json_text_list = json.loads(text) for i in json_text_list["data"]["replies"]: info_list.append([i["member"]["uname"],i["content"]["message"]]) # print(info_list)
# 保存评论文件为txt def saveTxt(filename,filecontent): filename = str(filename) + ".txt" for content in filecontent: with open(filename, "a", encoding='utf-8') as txt: txt.write(content[0] +' '+content[1].replace('\n','') + '\n\n') print("文件写入中")
if __name__ == "__main__": # 爬取小时姑娘 只爬取第一页的第一个 getAllAVList(99239148,3,1) for item in aid_list: info_list.clear() getAllCommentList(item) saveTxt(item,info_list)


40355658f28f330d7b484449348a3cd2.webp40355658f28f330d7b484449348a3cd2.webp



04PART词云图


89ef59dd482c9a6f64cede6daf5fc019.webp


我们将结果通过词云图的方式展示出来:


可以看出来,弹幕还是非常丰富多彩的。


有夸唱的好听的,有提到小时姑娘名字的,还有卧槽,哈哈哈。


值得注意的是里面有很多提到了东宫,查了一下资料才发现这首歌原来已经出现很久了:

f43dc316066e2ba47ca7e933811ac5cb.webp


大家感兴趣的话,可以去爬自己喜欢的视频哦。


1930dfc37106211ce666a5fa7089d05c.webp


40355658f28f330d7b484449348a3cd2.webp


·END·
 

◆ ◆ ◆  ◆ 



长按二维码关注我们



数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。


管理员二维码:


猜你喜欢

 笑死人不偿命的知乎沙雕问题排行榜

 用Python扒出B站那些“惊为天人”的阿婆主!

 互联网大佬学历&背景大揭秘,看看是你的老乡还是校友

 上万条数据撕开微博热搜的真相!

 你相信逛B站也能学编程吗? 

浏览 34
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报