在B站挖了一个月洞无果之后,打算还是要对B站做出点什么,于是我盯上了他们的弹幕系统!没错就是那名不虚传的B弹!
Python资源共享群:484031800
没错今天我们就是要来爬取B站的视频弹幕!
爬取B站弹幕说着简单实现难,你不仅仅要找到弹幕视频的api接口
还要掌握一系列的表达式及编程语法
但是
我并不慌,身为一名没多少进ICU的996患者(误)
让我们开始coding吧!
使用语言:Python3.7
在开始编写之前我们先对B站弹幕系统进行一个了解
我们先使用一点技术手段将B站弹幕系统单独分开来
然后打开审查元素进行api接口的查询
这里我先发一条弹幕
可以看到网络捕捉到了一条post的请求方式
点开之后逐步查询
成功找到接口!
实际上在GitHUb上bilibili的api接口就已经被公布了
但是作者认为还是手动去找比较靠谱一点
可以看到接口返回的都是我们要爬取的弹幕
我们打开Python,导入requests库
re库!
注意爬取弹幕要用到正则表达式到后面我会说明
我们先把几个模块导入进去
import requests as reqimport re
然后开始编写循环,毕竟不能只爬一次对吧
import requests as reqimport rewhile True: video_number = input("av:")
条件触发video_number 在这里数值很重要 所以有必要加入一个条件判断
import requests as reqimport rewhile True: video_number = input("av:") if video_number == int: print("int type"); else:
接下来就相当于字符拼接,这里我就不多说明了...
import requests as reqimport rewhile True: video_number = input("av:") if video_number == int: print("int type"); else: api_key = "https://api.bilibili.com/x/v1/dm/list.so?oid="+video_number repon = req.get(api_key) #获取api repon = encoding = "utf-8" #将编码转换为utf-8 xml = res.text
基本上响应都成功
接下来我们开始编写正则表达式
先看下xml里面的数据
从<d 开头我们开始截取到 >然后中间就是我们要进行获取的值
后面跟上</d>和xml变量
具体代码
re.findall("<d.*?>(.*?)</d>",xml)
然后接下来我们对其赋值变量,打印看看
import requests as reqimport rewhile True: avnumber = input("av:") if avnumber == int: print("OK") else: urlapi = "https://api.bilibili.com/x/v1/dm/list.so?oid="+avnumber res = req.get(urlapi) res.encoding = "utf-8" xmlString = res.text danmukus = re.findall("<d.*?>(.*?)</d>",xmlString)
神奇的bilibili
这样子看起来不太美观我们for循环输出
啊~舒服多了
拜拜