当前位置: 首页 > news >正文

用Python爬取B站热门视频并自动保存到本地

一、项目功能简介

我们要做的事情很简单:

  • 访问B站官方开放的热门视频接口

  • 提取出热门视频的关键信息,比如标题、作者、播放量、点赞数等等

  • 把这些数据保存到本地的 .json.csv 文件里

  • 支持每天定时自动执行,不用手动点运行!

最终效果是,每天都会在本地生成一份当天的热门视频数据。

二、准备工作

在开始之前,你需要安装以下Python第三方库:

pip install requests schedule

  • requests 用来发起HTTP请求

  • schedule 用来做定时任务

  • csvjsondatetime是Python内置库,不用额外安装)

三、完整代码

直接上代码!可以一键复制运行:

import requests
import json
import csv
import time
import schedule
from datetime import datetime# 请求头(伪装浏览器)
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer': 'https://www.bilibili.com/'
}# 获取B站热门视频数据
def get_bilibili_hot_videos(limit=20):url = f'https://api.bilibili.com/x/web-interface/popular?ps={limit}'try:response = requests.get(url, headers=HEADERS)response.raise_for_status()data = response.json()if data['code'] == 0:videos = []for item in data['data']['list']:video_info = {'aid': item['aid'],'bvid': item['bvid'],'title': item['title'],'author': item['owner']['name'],'view': item['stat']['view'],'danmaku': item['stat']['danmaku'],'reply': item['stat']['reply'],'favorite': item['stat']['favorite'],'coin': item['stat']['coin'],'share': item['stat']['share'],'like': item['stat']['like'],'duration': item['duration'],'pubdate': item['pubdate'],'ctime': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}videos.append(video_info)return videoselse:print(f"获取数据失败: {data['message']}")return Noneexcept Exception as e:print(f"请求出错: {str(e)}")return None# 保存到JSON文件
def save_to_json(data, filename):try:with open(filename, 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)print(f"数据已保存到 {filename}")except Exception as e:print(f"保存JSON文件出错: {str(e)}")# 保存到CSV文件
def save_to_csv(data, filename):if not data:returntry:with open(filename, 'w', encoding='utf-8', newline='') as f:writer = csv.DictWriter(f, fieldnames=data[0].keys())writer.writeheader()writer.writerows(data)print(f"数据已保存到 {filename}")except Exception as e:print(f"保存CSV文件出错: {str(e)}")# 每日定时任务
def daily_crawl_task():print(f"开始执行每日爬取任务: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")videos = get_bilibili_hot_videos(limit=50)if videos:date_str = datetime.now().strftime('%Y%m%d')json_filename = f'bilibili_hot_videos_{date_str}.json'csv_filename = f'bilibili_hot_videos_{date_str}.csv'save_to_json(videos, json_filename)save_to_csv(videos, csv_filename)print("每日爬取任务完成\n")# 主程序入口
def main():schedule.every().day.at("10:00").do(daily_crawl_task)  # 设置每天10点自动执行daily_crawl_task()  # 启动时先爬一次print("定时爬虫已启动,每天10:00自动爬取B站热门视频...")while True:schedule.run_pending()time.sleep(60)if __name__ == '__main__':main()

 

四、效果展示

运行程序后,你会在同目录下看到类似这样的文件:

  • bilibili_hot_videos_20250423.json

  • bilibili_hot_videos_20250423.csv

里面记录了当天的热门视频详细信息。比如CSV文件打开长这样👇:

相关文章:

  • Java多线程的暗号密码:5分钟掌握wait/notify
  • AutoGPT超详细教程
  • 服务器数据恢复—双循环RAID5数据恢复揭秘
  • Java Web容器分类及对比
  • BSTREE(二叉搜索树)的介绍与模拟实现
  • 【Nova UI】八、打造组件库第一个组件-图标组件(上):图标组件开发实战攻略
  • 【Java后端】MyBatis 与 MyBatis-Plus 如何防止 SQL 注入?从原理到实战
  • 锁存器知识点详解
  • Java基础第21天-正则表达式
  • Redis高频核心面试题
  • 网络安全职业技能大赛Server2003
  • ECharts 关系图表开发指南与 Vue3 组件封装
  • 杂谈-有感而发
  • LOAM的原理分析,源码解读,和运行调试
  • 接口测试和功能测试详解
  • SQL Server 2022 常见问题解答:从安装到优化的全场景指南
  • 使用 JUnit 4在 Spring 中进行单元测试的完整步骤
  • Pingora vs. Nginx vs. 其他主流代理服务器性能对比
  • Python 的 datetime 模块使用详解
  • 【Linux】详细介绍进程的概念
  • 乌代表团与美特使在伦敦举行会谈,双方同意继续对话
  • 2025年一季度上海市国民经济运行情况
  • 视频丨习近平同阿塞拜疆总统会谈:两国建立全面战略伙伴关系
  • 外交部:中方近日派出停火监督组赴缅,监督缅军和果敢同盟军停火
  • 中国政府援缅第八批紧急人道主义地震救灾物资抵达缅甸
  • 安且吉兮,西泠印社雅集吴昌硕故里