爬虫B站弹幕| 考完试,这辈子,这个班,基本是聚不齐了......
The following article is from GOGO数据 Author 是沐沐呀
文 |沐沐
来源:GOGO数据「ID: mu_science」
关于毕业,你有什么想说的呢?一起先来看看视频。
这里面有你的回忆吗?
毕业了,那种在青春里放肆的幸福我想以后不会在有了。
校服是我和她穿过唯一的情侣装,毕业照是我和她唯一的合影。
我曾如此讨厌学校,最后却如此怀念。
拍毕业照只需要三秒,定格的却是三年。
毕业了,不想说再见!
班主任说吃散伙饭的时候,全班的人都沉默了,班里第一次这么安静,嗯,要毕业了。
考完试,这辈子,这个班,基本是聚不齐了。
就这样眨眼间毕业了。如果上天再给我一次机会,我要永远不毕业。
这个六月。喜欢校园喜欢同学喜欢老师。这个夏天就要和他们挥手了。
我考了那么多试,没想到是为了离开家,故乡再没有春和秋,只剩下匆匆来去的冬夏。
网站分析
在B站中,许多基础的数据,如弹幕、评论、视频基本信息等,都有非常成熟和稳定的应用程序接口(API)可供使用。
也就是说,我们可以通过弹幕 API,获取一个视频的弹幕数据。
什么是API
API 是 Application Programming Interface (应用 编程 接口)三个单词的缩写。
通俗易懂的说,API 其实就是别人已经写好的可以实现特定功能的函数。
只需要调用它,传入规定的参数,这个函数就可以实现功能。
在B站中,只要视频中有弹幕,就会有一个 cid 参数。cid 用来表示某个视频对应的弹幕池。
前面我们提到,API 一般以 URL 形式存在的,B站的弹幕 API 的 URL 链接看图示代码中。
看来,只要知道了 cid 参数值,就可以找到视频弹幕数据的位置了。
如图我们搜索cid并且找到该视频的cid
输入到爬取弹幕的API中
http://comment.bilibili.com/{cid}.xml
在浏览器打开网址
发送请求
我们的目标就是将这些弹幕下载到我们的本地
url = f'http://comment.bilibili.com/{cid}.xml'
headers = {
'referer': 'https://www.bilibili.com/video/BV1dM4y1u76V',
'User-Agent': str(UserAgent().random)
}
resp = requests.get(url, headers = headers)
# 调用.encoding属性获取requests模块的编码方式
# 调用.apparent_encoding属性获取网页编码方式
# 将网页编码方式赋值给response.encoding
resp.encoding = resp.apparent_encoding
if resp.status_code == 200:
print(resp.text)
我们从获取到网站的响应信息后可以看出,所有的弹幕文字信息其实都是在
<d></d>标签之内的,所以我们选择使用正则提取。
<d p="251.98000,4,25,14811775,1594262476,0,9befc340,35190368391135239">我终将青春还给了她</d>
# 获取所有评论内容
content_list = re.findall('<d p=".*?">(.*?)</d>', resp.text)
for item in content_list:
print(item)
保存数据
数据获取就真么简单,接下来就是数据持久化。为了方便后续的词云可视化,我们选择将弹幕信息保存到 csv文件中
for item in content_list:
with open('B站弹幕.csv', 'a', encoding = 'utf-8')as fin:
fin.write(item + '\n')
print(item)
print('-------------弹幕获取完毕!-------------')
卧槽,弹幕全是表白,酸了酸了
可视化分析
我们要jieba来分词,使用imread模块来读取图片信息,最后使用wordcloud来生成我们想要的词云图。
with open(comment_file_path, encoding='utf-8')as file:
comment_text = file.read()
wordlist = jieba.lcut_for_search(comment_text)
new_wordlist = ' '.join(wordlist)
mask = imread('img_1.png')
wordcloud = WordCloud(font_path='msyh.ttc', mask=mask).generate(new_wordlist)
wordcloud.to_file('picture_1.png')
满满两张虐狗墙啊
1. 本文详细介绍了pandas在处理数据时常用到的技巧,
有兴趣的读者可以尝试自己动手练习一下。
2. 本文仅供读者学习使用,不做其他用途!
3. 右下角点亮[在看]
即可找我领取本文的全部代码呦!