使用Python爬取B站TOP100热门视频数据并保存为CSV文件

目录

一、效果呈现

二、讲解

1. 发送请求并获取数据

2. 提取视频信息

3. 保存为CSV文件

三、完整代码


一、效果呈现

二、讲解

1. 发送请求并获取数据

        首先,我们需要定义B站热门视频API的URL,并设置请求头以模拟浏览器访问。这样可以避免被识别为爬虫并提高请求的成功率。

import requests
import json
import pandas as pd

# 定义B站热门视频API的URL
url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all'  

# 定义请求头,模拟浏览器访问
headers = {
    'Referer': 'https://www.bilibili.com/v/popular/rank/all/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
}

# 发送GET请求到B站API并获取响应
response = requests.get(url, headers=headers)
# 解析响应内容为JSON格式
data = json.loads(response.text)

2. 提取视频信息

        从响应数据中,我们可以提取出视频列表,并初始化一些列表来存储视频的详细信息。(这里的各类数据可以按你自己的需求进行选择)

# 从响应数据中提取视频列表
video_list = data['data']['list']

# 初始化空列表以存储视频信息
rank_list = []   # 排行
title_list = []  # 视频标题
play_cnt_list = []  # 播放数
danmu_cnt_list = []  # 弹幕数
coin_cnt_list = []  # 投币数
like_cnt_list = []  # 点赞数
share_cnt_list = []  # 分享数
favorite_cnt_list = []  # 收藏数
author_list = []  # 作者
video_url = []  # 视频地址

# 遍历视频列表并提取每部视频的信息
for idx, video in enumerate(video_list):
    rank_list.append(idx + 1)  # 添加视频排行
    title_list.append(video['title'])  # 添加视频标题
    play_cnt_list.append(video['stat']['view'])  # 添加播放数
    danmu_cnt_list.append(video['stat']['danmaku'])  # 添加弹幕数
    coin_cnt_list.append(video['stat']['coin'])  # 添加投币数
    like_cnt_list.append(video['stat']['like'])  # 添加点赞数
    share_cnt_list.append(video['stat']['share'])  # 添加分享数
    favorite_cnt_list.append(video['stat']['favorite'])  # 添加收藏数
    author_list.append(video['owner']['name'])  # 添加作者名称
    video_url.append(f'https://www.bilibili.com/video/{video["bvid"]}')   # 添加视频地址

3. 保存为CSV文件

        最后,我们使用'pandas'库创建一个DataFrame,并将所有提取的数据存储在这个DataFrame中。然后,我们将这个DataFrame保存为CSV文件。

# 使用pandas创建DataFrame,准备存储所有提取的数据
df = pd.DataFrame({
    '排行': rank_list,
    '视频标题': title_list,
    '视频地址': video_url,
    '作者': author_list,
    '播放数': play_cnt_list,
    '弹幕数': danmu_cnt_list,
    '硬币数': coin_cnt_list,
    '点赞数': like_cnt_list,
    '分享数': share_cnt_list,
    '收藏数': favorite_cnt_list,
})

# 将DataFrame保存为CSV文件,不包含索引,使用utf_8_sig编码
df.to_csv('B站TOP100.csv', index=False, encoding="utf_8_sig")

三、完整代码

import requests  # 导入requests库以发送HTTP请求
import json  # 导入json库以处理JSON数据
import pandas as pd  # 导入pandas库以创建和操作数据表格

# 定义B站热门视频API的URL
url = 'https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all' 

# 定义请求头,模拟浏览器访问
headers = {
    'Referer': 'https://www.bilibili.com/v/popular/rank/all/', 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
}

# 发送GET请求到B站API并获取响应
response = requests.get(url, headers=headers)
# 解析响应内容为JSON格式
data = json.loads(response.text)

# 从响应数据中提取视频列表
video_list = data['data']['list']

# 初始化空列表以存储视频信息
rank_list = []   # 排行
title_list = []  # 视频标题
play_cnt_list = []  # 播放数
danmu_cnt_list = []  # 弹幕数
coin_cnt_list = []  # 投币数
like_cnt_list = []  # 点赞数
share_cnt_list = []  # 分享数
favorite_cnt_list = []  # 收藏数
author_list = []  # 作者
video_url = []  # 视频地址

# 遍历视频列表并提取每部视频的信息
for idx, video in enumerate(video_list):
    rank_list.append(idx + 1)  # 添加视频排行
    title_list.append(video['title'])  # 添加视频标题
    play_cnt_list.append(video['stat']['view'])  # 添加播放数
    danmu_cnt_list.append(video['stat']['danmaku'])  # 添加弹幕数
    coin_cnt_list.append(video['stat']['coin'])  # 添加投币数
    like_cnt_list.append(video['stat']['like'])  # 添加点赞数
    share_cnt_list.append(video['stat']['share'])  # 添加分享数
    favorite_cnt_list.append(video['stat']['favorite'])  # 添加收藏数
    author_list.append(video['owner']['name'])  # 添加作者名称
    video_url.append(f'https://www.bilibili.com/video/{video["bvid"]}')  # 添加视频地址

# 使用pandas创建DataFrame,准备存储所有提取的数据
df = pd.DataFrame({
    '排行': rank_list,
    '视频标题': title_list,
    '视频地址': video_url,
    '作者': author_list,
    '播放数': play_cnt_list,
    '弹幕数': danmu_cnt_list,
    '硬币数': coin_cnt_list,
    '点赞数': like_cnt_list,
    '分享数': share_cnt_list,
    '收藏数': favorite_cnt_list,
})

# 将DataFrame保存为CSV文件,不包含索引,使用utf_8_sig编码
df.to_csv('B站TOP100.csv', index=False, encoding="utf_8_sig")

物联沃分享整理
物联沃-IOTWORD物联网 » 使用Python爬取B站TOP100热门视频数据并保存为CSV文件

发表评论