赞
踩
打开哔哩哔哩官网https://www.bilibili.com/
,播放任意一个视频。
键盘 F12 快捷键,或者鼠标右击“检查”打开浏览器的检查页面。
点开视频右侧的“弹幕列表”,点击下面的“查看历史弹幕”,选择一个其他日期。
在开发者工具页面,找到seg.so?type=1&oid=
这个请求,右边就是弹幕的 url 地址。
response 内就是乱码的弹幕数据,弹幕内容可以通过 re 正则表达式提取。(本文首发在“程序员coding”公众号)
import requests
import re
import datetime
url = f'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1385453956&date=2024-01-01'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'cookie': '替换自己的'
}
response = requests.get(url=url, headers=headers)
content_list = re.findall('[\u4e00-\u9fa5]+', response.text)
content = '\n'.join(content_list)
# 爬取开始日期和结束日期范围内的弹幕
begin = datetime.date(2023, 12, 28)
end = datetime.date(2024, 1, 2)
for i in range((end - begin).days + 1):
day = begin + datetime.timedelta(days=i)
url = f'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1385453956&date={day}'
日期区间也可以使用pandas
中的date_range
函数构造
import pandas as pd
for day in pd.date_range(begin,end).strftime('%Y-%m-%d'):
url = f'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1385453956&date={day}'
content = '\n'.join(content_list)
with open('弹幕.txt', mode='a', encoding='utf-8') as f:
f.write(content)
print("保存完成")
# (本文首发在“程序员coding”公众号)
import requests
import re
import datetime
# content_list存放所有弹幕
content_list = []
# 爬取开始日期和结束日期范围内的弹幕
begin = datetime.date(2023, 12, 28)
end = datetime.date(2024, 1, 2)
for i in range((end - begin).days + 1):
day = begin + datetime.timedelta(days=i)
url = f'https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=1385453956&date={day}'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'cookie': '替换自己的'
}
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
temp_list = re.findall('[\u4e00-\u9fa5]+', response.text)
content_list.extend(temp_list)
print("爬取", day, "日弹幕,获取到:", len(temp_list), "条弹幕,已经增加到总列表。总列表共有", len(content_list),
"条弹幕。")
print(content_list)
# 保存数据
content = '\n'.join(content_list)
with open('弹幕.txt', mode='a', encoding='utf-8') as f:
f.write(content)
print("保存完成")
pycharm 控制台输出如下,获取到 16589 条弹幕。(本文首发在“程序员coding”公众号)
保存的《弹幕.txt》文件如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。