爬取b站歌曲的弹幕

先来放上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

屏幕截图 2021-10-04 105724

这样就可以的到弹幕的真正地址:https://api.bilibili.com/x/v1/dm/list.so?oid=404210194

image-20211004110100121

只要解析这个网址,解析网页后就可以获取我们想要的数据了

【代码】:

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)

结果如下:

image-20211004110217664

猜你喜欢

转载自blog.csdn.net/weixin_48931875/article/details/121301663