教你用Python爬虫爬哔哩哔哩网站弹幕

教你用Python爬虫爬哔哩哔哩网站弹幕

看过B站的小伙伴都知道,B站的灵魂那就是“弹幕”,视频越厉害弹幕就越多,还有一些高级弹幕效果更加酷炫,今天呢,小千就来教大家如何去利用Python开发一个爬虫来抓取我们想要的视频弹幕。

1.弹幕哪里找?

平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码中,以XML的数据格式进行加载的:

XML和JSON、YAML一样是一种通用的标记信息表达方式,可以简单的理解为一种记录数据的格式。XML和描述网页的语言HTML非常像,所以你会在截图中看到<d></d>这样的标签。

那么上图这个弹幕文件的url是什么呢?

它以一个固定的url地址+视频的cid+.xml组成。只要找到你想要的视频cid,替换这个url就可以爬取所有弹幕了(b站大部分网页给出的字幕限制是1000条)

一个视频的cid在哪里呢?右键网页,打开网页源代码,搜索cid”就能找到:

cid在网页源码中是一个很常见的词组,而我们要寻找的正确的cid都会写成"cid":xxxxxxxx的形式。为了缩小搜索范围,在后方加上一个引号会更快搜索到。

开始爬取

观察网页,可以发现,所有的弹幕都放在了<d>标签下,那么我们需要构建一个程序获取所有的<d>标签

第一步,导入requests库,使用request.get方法访问弹幕url:

import requests
#获取页面数据html
url=r'https://comment.bilibili.com/78830153.xml'
r=requests.get(url)#访问url
r.encoding='utf8'

第二步,导入BeautifulSoup库,使用lxml解析器解析页面:

from bs4 import BeautifulSoup
#解析页面
soup=BeautifulSoup(r.text,'lxml')#lxml是常用的解析器,需要提前使用pip工具安装lxml库
d=soup.find_all('d')#找到所有页面的d标签
#print(d)

这样操作后,所有藏在d标签里的弹幕内容就被python抓取到了 :

解析完成后,接下来第三步就是运用Python基础函数中的for函数,将单条数据装进字典,再将所有字典装进一个列表:

#解析弹幕,将弹幕、网址、时间整理为字典,最后加和成列表,共1000条数据

dlst=[]
for i in d:
danmuku={}#将单条数据装进字典
danmuku['弹幕']=i.text
danmuku['网址']=url
danmuku['时间']=datetime.date.today()#需要先导入datetime库