先来放上b站的《染色体》链接:https://www.bilibili.com/video/BV1Xf4y1A75e
参考博客:https://blog.csdn.net/weixin_29130369/article/details/112744783
b站弹幕的爬取
通过Chrome开发者工具里面的Network页面,可以找到B站弹幕数据的接口。
- 爬取b站弹幕数据的API:https://api.bilibili.com/x/v1/dm/list.so?oid=XXX
- 后面有个oid,oid后面是一串数字,不同的网页有着不同的数字串
- 怎样获取oid?首先要获取cid。
【cid的获取】
打开浏览器控制台,点击network:找到下面这个,即这个歌曲的cid就是404210194
这样就可以的到弹幕的真正地址:https://api.bilibili.com/x/v1/dm/list.so?oid=404210194
只要解析这个网址,解析网页后就可以获取我们想要的数据了
【代码】:
import requests
import json
import chardet
# import refrom
import pprint
import re
#1.根据bvid请求得到cid
def get_cid():
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV1Xf4y1A75e&jsonp=jsonp'
res = requests.get(url).text
json_dict = json.loads(res)
# pprint(json_dict)
return json_dict["data"][0]["cid"]
#2.根据cid请求弹幕,解析弹幕得到最终的数据
def get_data(cid):
final_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + str(cid)
final_res = requests.get(final_url)
final_res.encoding = chardet.detect(final_res.content)['encoding']
final_res = final_res.text
pattern = re.compile('(.*?)')
data = pattern.findall(final_res)
# pprint(final_res)
return data
#3.保存弹幕列表
def save_to_file(data):
with open("dan_mu.txt",mode="w",encoding="utf-8") as f:
for i in data:
f.write(i)
# f.write("\n")
cid = get_cid()
data = get_data(cid)
save_to_file(data)
结果如下: