本代码示例向学习者展示了如何从 Bilibili 网站爬取视频信息,并将获取到的数据保存到 CSV 文件中。以下是本教程的内容概览:
这是 Bilibili 数据分析项目的一部分。
内容概览
- 导入所需库
- 设置请求头
- 定义 API 接口 URL
- 从 CSV 文件读取 bvid 列表
- 获取视频信息并保存到 DataFrame 中
- 将 DataFrame 保存到 CSV 文件中
导入所需库
本代码依赖以下库:
- time:处理日期和时间
- tqdm:显示进度条
- requests:发起 HTTP 请求
- json:处理 JSON 数据
- pandas:数据操作和分析
import time
from tqdm import tqdm
import requests
import json
import pandas as pd
设置请求头
请求头是用于伪装成浏览器发送请求,防止被 Bilibili 识别为爬虫。本示例中,我们设置了 User-Agent、Referer、cookie 和 origin 等请求头。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
'Referer': 'https://www.bilibili.com/',
'cookie': "YOUR COOKIE",
'origin': 'https://www.bilibili.com'
}
定义 API 接口 URL
本示例使用的 API 接口 URL 为:https://api.bilibili.com/x/web-interface/view?bvid=
。此接口用于获取指定 bvid 的视频的详细信息。
api_url = 'https://api.bilibili.com/x/web-interface/view?bvid='
从 CSV 文件读取 bvid 列表
我们首先使用 pandas 库读取一个包含视频 bvid 的 CSV 文件,并将 bvid 列表保存到一个变量中。
video_list = pd.read_csv('/Volumes/SSD/Data/getVideoid_byhot.csv')
bvid_list = video_list['bvid'].values.tolist()
获取视频信息并保存到 DataFrame 中
使用 tqdm 包装 bvid_list,以便显示进度条。对于列表中的每个 bvid,我们:
- 构造请求 URL
- 发起请求并解析 JSON 数据
- 提取视频信息并将其保存到字典中
- 将字典转换为 DataFrame
- 将新 DataFrame 追加到总 DataFrame 中
stat_pd = pd.DataFrame()
for bvid in tqdm(bvid_list):
page_url = api_url + bvid
response = requests.get(page_url, headers=headers)
data = json.loads(response.text)
info_dic = dict(data['data']['stat'])
...
info_pd = pd.DataFrame(info_dic, index=[0])
stat_pd = pd.concat([stat_pd, info_pd], ignore_index=True)
将 DataFrame 保存到 CSV 文件中
最后,我们将包含所有视频信息的 DataFrame 保存到 CSV 文件中。
stat_pd.to_csv('/Volumes/SSD/Data/getVideoinfo_byhot.csv')
注意事项
- 请确保您有合法的 Bilibili 帐户的 cookie。在本示例中,我们将其添加到请求头中。
- 为避免被 Bilibili 限制,可以适当增加请求之间的延迟。本示例未包含此功能。
- 如果需要获取更多或不同的视频信息,请根据需要修改 API 接口 URL 和提取信息的代码。