当我们观看一个视频的时候,会有一个视频的BV号:
(当我们上网爬取内容的时候不仅可以自行查看检查模式也是去网上搜一搜看有没有直接给出的API)
而通过这个API我们可以获取到视频的cid:
https://api.bilibili.com/x/player/pagelist?bvid=BV17s411x7qK&jsonp=jsonp
可以通过字典的索引获取到cid
再通过https://api.bilibili.com/x/v1/dm/list.so?oid=XXXX这里的XXXX就是cid,就可以获取到对应视频的弹幕
之后通过text内容去find_all d标签然后遍历d标签里的内容存入list列表中,然后再将list列表内容存入txt文件中
完整代码import requests
from bs4 import BeautifulSoup
import re
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36 FS"}
list=[]
def get_cid(url):
data = requests.get(url=url,headers=headers)
# print(type(data))#
data = data.json()
# print(type(data))#要进行类型转换才能获取其中数据
cid = data['data'][0]['cid']
return cid
def get_html(url,cid):
html_message = requests.get(url = url,headers=headers)
html_message.encoding = html_message.apparent_encoding
# .text是返回页面内容 .content是以二进制形式返回response内容
print(html_message.text)
# 见下图
soup = BeautifulSoup(html_message.text,'lxml')
data = soup.find_all('d')
# 对每一个d标签进行遍历
for each in data:
print(each)
# 获取每一个d标签的内容也就是弹幕文字
stringword = each.text
# 添加入list全局列表中
list.append(stringword)
return list
def save_to_file(data):
# 将data内容(列表)写入文件txt中
with open("dan_mu.txt",mode="w",encoding="utf-8") as f:
for i in data:
f.write(i)
f.write("n")
def main():
url = 'https://api.bilibili.com/x/player/pagelist?bvid=BV17s411x7qK&jsonp=jsonp'
# 根据url获取cid
cid = get_cid(url)
# 根据cid获取弹幕html
oid_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+str(cid)
data = get_html(oid_url,cid)
# 保存弹幕
save_to_file(data)
main()



