《Python 实现 B 站视频信息爬虫:从批量获取到 CSV 保存》

发布于:2025-06-30 ⋅ 阅读:(24) ⋅ 点赞:(0)

B 站视频信息爬虫实战:用 Python 批量获取 B 站视频数据

引言

在数据分析和内容研究场景中,获取 B 站视频的标题、播放量、作者等信息是常见需求。本文将介绍如何使用 Python 编写一个 B 站视频爬虫,通过 DrissionPage 库实现自动化数据采集,并保存为 CSV 格式。相比传统 Selenium,DrissionPage 的 API 更简洁,适合快速开发爬虫脚本。

技术栈与环境准备
  • 核心库
    • DrissionPage:基于 Chromium 的自动化操作库,支持元素定位和 JS 执行。
    • csv:处理 CSV 文件读写。
    • re:正则表达式(代码中未直接使用,但爬虫中常用于数据清洗)。
    • os:文件路径操作。
    • time:控制请求间隔,避免频繁请求被封。
  • 安装依赖

pip install drissionpage  # 安装DrissionPage库

首次运行时,库会自动下载 Chromium 浏览器(若未安装),或使用本地已安装的 Chrome/Edge。

代码核心功能解析
1. 初始化与搜索流程

import time

from DrissionPage import ChromiumPage

import csv

import re

import os

# 配置页面

url = 'https://search.bilibili.com/all'

dp = ChromiumPage()

dp.get(url)

key = input("请输入你想爬取的关键词")

# 搜索关键词

dp.ele('css:.search-input-el').input(key)

dp.ele('css:.vui_button.vui_button--blue.vui_button--lg.search-button').click()

time.sleep(2)  # 等待搜索结果加载

  • 核心逻辑:创建浏览器实例,访问 B 站搜索页,通过 CSS 选择器定位搜索框和按钮,输入关键词并点击。
  • 关键点:CSS 选择器需根据 B 站页面结构动态调整(若页面更新,选择器可能失效)。
2. 滚动加载更多视频

# 滚动页面加载更多内容

scroll_times = 20  # 可根据需要调整滚动次数

for i in range(scroll_times):

    dp.run_js('window.scrollTo(0, document.body.scrollHeight)')

    print(f"正在加载更多内容,已滚动 {i + 1}/{scroll_times} 次")

    time.sleep(2)  # 等待新内容加载

  • 原理:通过 JS 执行页面滚动,模拟用户浏览行为,触发 B 站的无限滚动加载机制。
  • 优化点:可改为检测页面是否加载完毕(如判断新元素是否出现),避免固定次数滚动导致资源浪费。
3. CSV 文件操作

# 创建CSV文件并写入表头

csv_file = f"{key}.csv"

try:

    with open(csv_file, 'w', newline='', encoding='utf-8-sig') as f:

        writer = csv.writer(f)

        writer.writerow(['标题', 'up主', 'up主页链接','发布时间', '播放量', '评论量', '视频时长', '视频链接'])

    print(f"CSV文件已创建: {os.path.abspath(csv_file)}")

except Exception as e:

    print(f"创建CSV文件失败: {e}")

  • 注意事项
    • utf-8-sig编码避免 CSV 文件在 Excel 中打开时出现乱码。
    • newline=''防止 Windows 系统中出现多余空行。
4. 视频数据提取与保存

video_cards = dp.eles('css:.col_3.col_xs_1_5.col_md_2.col_xl_1_7.mb_x40')

print(f"检测到 {len(video_cards)} 个视频卡片")

# 遍历卡片提取信息

for card in video_cards:

    try:

        # 提取标题、作者、时间等信息(代码略,见原脚本)

        # ...

        

        # 写入CSV

        data_row = [title, author, up_link, date, views, comments, duration, video_link]

        writer.writerow(data_row)

    except Exception as e:

        print(f"处理视频时出错: {e}")

        continue

  • 元素定位技巧
    • 使用eles('css:选择器')获取多个元素,ele('css:选择器')获取单个元素。
    • 通过attr('属性名')获取元素属性(如链接),text获取文本内容。
  • 异常处理:单个视频提取失败时跳过,保证整体爬取流程不中断。
使用步骤与示例
  1. 运行脚本

python b站爬虫.py

  1. 输入关键词:如 “Python 教程”,脚本将搜索该关键词并爬取结果页视频。
  2. 查看结果:当前目录下生成Python教程.csv文件,包含标题、播放量等信息。
注意事项与优化建议
  1. 反爬机制应对
    • 增加随机延时(如time.sleep(2+random.random()*3)),避免请求过于频繁。
    • 定期更换 IP(或使用代理),防止 IP 被封。
  1. 页面结构变化
    • B 站页面更新可能导致 CSS 选择器失效,需通过浏览器开发者工具重新定位元素。
  1. 数据清洗
    • 播放量、评论量等数据可能包含 “万”“亿” 等单位,需用正则表达式转换为数字(如re.sub('万', '0000', views))。
  1. 效率提升
    • 使用多线程或协程并发爬取,减少总体耗时(需注意控制并发量,避免服务器压力过大)。
结语

本文提供的 B 站爬虫脚本可作为基础模板,适用于数据研究、竞品分析等场景。但需注意:爬虫应遵守网站规则(如查看 B 站的 robots.txt),避免过度爬取影响服务器性能。实际应用中可结合数据库存储、数据可视化等功能,构建更完整的数据分析系统。

如需进一步交流,可在评论区留言探讨爬虫优化方向或遇到的问题! 


网站公告

今日签到

点亮在社区的每一天
去签到