Python超简短代码实现B站视频爬取全攻略:无需音视频拼接的超详细教程!
B 站 (Bilibili) 是国内最受欢迎的视频平台之一,很多时候我们想下载自己喜欢的视频离线观看,但 B 站并没有提供直接的下载按钮。这篇文章将带你用 Python 编写一个爬虫,自动获取 B 站视频地址并下载它!
本文适合有一定 Python 基础的开发者,如果你是爬虫新手,也可以跟着代码一步步学习!
1. 准备工作
在开始编写爬虫之前,确保你的 Python 环境已经安装了以下依赖库:
pip install requests
requests 用于发送 HTTP 请求,获取网页内容。
2. 爬取 B 站视频核心代码
import requests
import re
import json
# 用户输入 B 站视频 URL
url = input("请输入你想爬取视频的 URL:")
# 请求头,模拟浏览器访问 B 站
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
"referer": "https://www.bilibili.com/",
"cookie": "你的 Cookie", # 需要填写自己的 Cookie 才能访问
}
# 发送请求,获取网页 HTML 内容
res = requests.get(url, headers=headers).text
# 使用正则表达式提取视频的 avid、bvid 和 cid
pattern = r'"aid":(\d+),"bvid":"([^"]+)","cid":(\d+)'
avid, bvid, cid = re.findall(pattern, res)[0]
print(f"AID: {avid}, BVID: {bvid}, CID: {cid}")
# 构造 API 请求,获取视频播放地址
play_url = f"https://api.bilibili.com/x/player/wbi/playurl?avid={avid}&bvid={bvid}&cid={cid}"
resp = requests.get(play_url, headers=headers).text
resp_dict = json.loads(resp)
# 提取视频的真实 URL
video_url = resp_dict['data']['durl'][0]['url']
print("视频地址:", video_url)
# 下载视频
response = requests.get(video_url, headers=headers).content
with open("bilivideo.mp4", "wb") as f:
f.write(response)
print("视频下载完成!")
3. 代码讲解
(1)获取 B 站视频的基本信息
B 站的视频页面中包含 avid
、bvid
和 cid
,我们使用正则表达式提取它们,方便后续 API 请求。
(2)调用 API 获取视频地址
B 站提供了一个 API,https://api.bilibili.com/x/player/wbi/playurl
,它可以返回视频的真实播放地址,我们利用 requests
发送请求并解析 JSON 数据。
(3)下载视频
获取到视频的 URL 后,我们再用 requests.get()
直接下载视频并保存为 bilivideo.mp4
。
4. 关键问题解答
-
为什么需要 Cookie?
- B 站对 API 请求做了访问限制,必须携带有效的 Cookie 才能获取到视频数据,否则会返回错误信息。
-
如何获取自己的 Cookie?
- 打开 B 站官网,登录你的账号
- 按
F12
打开开发者工具 - 切换到
Network
选项卡,刷新页面 - 找到请求
www.bilibili.com
,复制其中的cookie
值 -
这段代码能爬取所有 B 站视频吗?
- 普通视频可以,但付费、会员专享或部分版权受限的视频无法下载。
-
爬取 B 站视频是否合法?
- 本教程仅供学习交流,切勿用于商业或非法用途,避免侵权。
5. 结语
通过本教程,你学会了如何用 Python 编写爬虫来爬取 B 站视频。如果你对爬虫技术感兴趣,可以继续深入学习 Selenium
、BeautifulSoup
、Scrapy
等更高级的爬虫框架!
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、分享!🚀🚀🚀
作者:来自星星的坤