debug后分享出来,供使用。
欢迎评论交流
import requests
import time
import csv
headers = {
'User-Agent': ' ' #改为自己的User-Agent
}
def fetch_comments(video_id):
url = f'https://api.bilibili.com/x/v2/reply/main?type=1&oid={video_id}&mode=3'
try:
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
data = response.json()
comments = []
if data and 'data' in data and 'replies' in data['data']:
for comment in data['data']['replies']:
comment_info = {
'用户昵称': comment['member']['uname'],
'评论内容': comment['content']['message'],
'评论层级': '一级评论',
'性别': comment['member']['sex'],
'用户当前等级': comment['member']['level_info']['current_level'],
'点赞数量': comment['like'],
'回复时间': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(comment['ctime']))
}
comments.append(comment_info)
print(comment_info)
return comments
else:
print(f'请求失败:{response.status_code}')
except requests.RequestException as e:
print(f"请求出错: {e}")
return []
def save_comments_to_csv(comments, video_id):
with open(f'result/{video_id}.csv', mode='w', encoding='utf-8', newline='') as file:
writer = csv.DictWriter(file,
fieldnames=['用户昵称', '性别', '评论内容', '评论层级', '用户当前等级',
'点赞数量', '回复时间'])
writer.writeheader()
for comment in comments:
writer.writerow(comment)
video_name = ' ' # 视频名字
video_id = ' ' # 视频bv号
print(f'视频名字: {video_name}, video_id: {video_id}')
comments = fetch_comments(video_id)
save_comments_to_csv(comments, video_name)