如何使用 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 站的视频页面中包含 avidbvidcid,我们使用正则表达式提取它们,方便后续 API 请求。

(2)调用 API 获取视频地址

B 站提供了一个 API,https://api.bilibili.com/x/player/wbi/playurl,它可以返回视频的真实播放地址,我们利用 requests 发送请求并解析 JSON 数据。

(3)下载视频

获取到视频的 URL 后,我们再用 requests.get() 直接下载视频并保存为 bilivideo.mp4


4. 关键问题解答

  1. 为什么需要 Cookie?

    • B 站对 API 请求做了访问限制,必须携带有效的 Cookie 才能获取到视频数据,否则会返回错误信息。
  2. 如何获取自己的 Cookie?

    • 打开 B 站官网,登录你的账号
    • F12 打开开发者工具
    • 切换到 Network 选项卡,刷新页面
    • 找到请求 www.bilibili.com,复制其中的 cookie
  3. 这段代码能爬取所有 B 站视频吗?

    • 普通视频可以,但付费、会员专享或部分版权受限的视频无法下载。
  4. 爬取 B 站视频是否合法?

    • 本教程仅供学习交流,切勿用于商业或非法用途,避免侵权。

5. 结语

通过本教程,你学会了如何用 Python 编写爬虫来爬取 B 站视频。如果你对爬虫技术感兴趣,可以继续深入学习 SeleniumBeautifulSoupScrapy 等更高级的爬虫框架!

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、分享!🚀🚀🚀

使用 Python 中的 requests 库来爬取 B 视频,你需要了解一些基本的知识。 首先,B 视频链接格式通常为:https://www.bilibili.com/video/av + 视频 ID 。例如,一个视频链接为 https://www.bilibili.com/video/av12345678 ,其中 12345678 是该视频的 ID。 接下来,你需要使用 requests 库向 B 服务器发送请求,并使用正则表达式从响应中提取视频链接。下面是一个简单的示例代码: ```python import requests import re url = 'https://www.bilibili.com/video/av12345678' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } response = requests.get(url, headers=headers) html = response.text pattern = re.compile(r'"url":"(https://upos-hz-mirrorks3u.acgvideo.com/upgcxcode/\S*?&cdn=\S*?)",') match = pattern.search(html) if match: video_url = match.group(1) print(video_url) else: print('未找到视频链接') ``` 在这个示例代码中,我们首先定义了视频的链接和请求头信息。然后使用 requests 库向 B 服务器发送 GET 请求,并将响应的 HTML 文本保存在变量 html 中。 接下来,我们使用正则表达式从 HTML 文本中提取视频链接。这里我们使用了一个正则表达式模式,可以匹配 B 视频链接中的视频地址。如果找到了视频链接,我们就将其打印出来。如果没有找到视频链接,则打印“未找到视频链接”。 需要注意的是,B 视频链接可能会过期或被删除,因此该方法并总是可靠的。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值