使用Python3+requests+re爬取B站弹幕

关注呀,米娜桑!

在B站挖了一个月洞无果之后,打算还是要对B站做出点什么,于是我盯上了他们的弹幕系统!没错就是那名不虚传的B弹!

没错今天我们就是要来爬取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)

啊~舒服多了

拜拜

发布了16 篇原创文章 · 获赞 9 · 访问量 6572

猜你喜欢

转载自blog.csdn.net/weixin_42608762/article/details/100850808