手把手教你用Python爬取B站视频(附完整代码)
前言:这可能是最实用的B站爬虫教程!
最近发现很多小伙伴对视频爬虫特别感兴趣(尤其是二次元爱好者们😏),今天就带大家用Python实现B站视频的自动化爬取。不过要提前声明:本教程仅供学习交流,请遵守B站用户协议,切勿进行恶意爬取!!!
一、准备工作(工具清单)
1. 环境要求
- Python 3.8+(推荐使用Anaconda)
- Chrome浏览器(版本越新越好)
- 网络通畅(建议不要用校园网,你懂的...)
2. 必备库安装
打开cmd/powershell输入:
python
pip install requests selenium webdriver-manager
pip install moviepy # 用于视频合成
pip install tqdm # 进度条显示(装X神器)
3. 驱动配置(关键步骤!)
这里我们用Selenium控制浏览器:
```python
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
自动下载对应版本驱动(超方便!)
driver = webdriver.Chrome(ChromeDriverManager().install())
```
二、实战开始!4步拿下视频
步骤1:获取视频ID(BVID)
在浏览器打开任意B站视频页面,观察URL结构:
https://www.bilibili.com/video/BV1gM4y1w7Bx
↑↑↑↑↑↑↑↑↑↑↑↑↑
这个BV1gM4y1w7Bx就是视频的唯一标识符!
步骤2:解析真实视频地址(核心难点!)
B站的视频地址是动态加载的,我们需要先获取视频的API接口:
```python
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://www.bilibili.com/'
}
def get_real_url(bvid):
api_url = f'https://api.bilibili.com/x/player/playurl?bvid={bvid}&qn=112'
response = requests.get(api_url, headers=headers)
return response.json()['data']['durl'][0]['url']
```
步骤3:下载视频流(分片下载更稳定)
```python
from tqdm import tqdm
def download_video(url, filename):
response = requests.get(url, headers=headers, stream=True)
total_size = int(response.headers.get('content-length', 0))
```
步骤4:合并音视频(完整视频诞生!)
B站的音频和视频是分开的,需要合并:
```python
from moviepy.editor import VideoFileClip, AudioFileClip
def merge_av(video_path, audio_path, output_path):
video = VideoFileClip(video_path)
audio = AudioFileClip(audio_path)
final = video.set_audio(audio)
final.write_videofile(output_path, codec='libx264')
```
三、完整代码示例
```python
def main(bvid):
# 获取真实地址
video_url = get_real_url(bvid)
audio_url = video_url.replace('/video/', '/audio/')
if name == 'main':
main('BV1gM4y1w7Bx') # 替换成你要下载的BVID
```
四、常见问题排雷指南
Q1:为什么返回403错误?
A:记得添加headers中的Referer和User-Agent!B站的反爬机制会检查这些参数。
Q2:下载的视频没有声音?
A:一定要先下载音频文件再进行合并,单独的视频文件是不带声音的!
Q3:如何提高下载速度?
试试这些方法:
1. 使用多线程下载(但小心被封IP!)
2. 设置代理IP池
3. 调整qn参数的值(80=高清,112=4K)
Q4:遇到动态加载的视频怎么办?
这时候需要Selenium大显身手了!示例代码:
```python
使用无头浏览器渲染页面
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless') # 无界面模式
driver = webdriver.Chrome(options=options)
driver.get(url)
page_source = driver.page_source # 获取完整页面源码
```
五、重要注意事项(必看!)
- 控制请求频率:建议每个请求间隔3-5秒,不要给B站服务器造成压力
- 遵守robots协议:B站的robots.txt规定部分路径不允许爬取
- 版权声明:下载的视频请勿用于商业用途
- 账号安全:不要用登录态进行爬取,小心账号被封!
六、升级玩法(高手进阶)
想让你的爬虫更强大?试试这些扩展功能:
1. 添加自动转码功能(MP4转GIF)
2. 集成OCR识别视频中的文字
3. 自动上传到云存储(阿里云OSS/AWS S3)
4. 搭建定时任务系统(每天自动下载更新)
```python
示例:自动生成GIF
from moviepy.editor import *
def create_gif(video_path, output_path, start=5, duration=3):
clip = VideoFileClip(video_path).subclip(start, start+duration)
clip.write_gif(output_path, fps=15)
```
结语:爬虫的正确打开方式
通过这个案例,我们不仅学会了B站视频爬取的技术,更重要的是理解了一个完整的爬虫开发流程:分析目标 -> 寻找接口 -> 处理反爬 -> 数据存储 -> 异常处理。
最后提醒各位开发者:技术是把双刃剑,请在法律允许的范围内合理使用爬虫技术。如果觉得本教程有帮助,欢迎一键三连(点赞收藏关注)支持作者~

浙公网安备 33010602011771号