利用requests爬取B站视频

1 篇文章 0 订阅
1 篇文章 0 订阅

本文主要介绍如何利用requests爬取B站视频并合成的相关技术。话不多说,我们直接开始喵~

(可以先点个赞鼓励一下作者喵QAQ)


1. 首先,在代码开头,我们导入os库、requests库、re库、ffmpeg库(后续合成需要用到):

import requests
import ffmpeg
import re
import os

2. 下面我们再来构建headers:

headers = {
    'Referer': 'https://www.bilibili.com/',
    'Cookie': '',    # 这里的Cookie输入自己B站的cookie喵
    'User-Agent': ''    # 这里填入自己的User-Agent
}

关于Cookie和User-Agent怎么找,这里我们详细来讲解一下:

首先我们随便打开一个视频,打开开发者界面后,刷新网页以获取到所有事件。在“网络”选项中点击第一个类型为“document”的事件,在标头中找到Cookie和User-Agent即可

取得所有headers所需信息后,我们开始想办法获取视频和音频所在的url(B站的视频文件和音频文件是分离的)。这里我们先对上述document中的url发送get请求,取得响应内容:

url = 'https://www.bilibili.com/video/' + bv
direct = requests.get(url, headers=headers).text
print(direct)

运行这一段代码(其中bv是指该视频的bv号)我们可以得到响应内容,在响应内容中我们搜索“baseurl”后出现多个结果,如下:

在响应中查找baseurl

我们可以发现,这一段下面有个“mineType”,对应的值为“video/mp4”,意味着这是视频画面的url。再往后面查询,如果“mineType”对应的值为“audio/mp3”,则为音频的url。然后,我们据此构建正则表达式提取出目标url,将画面和音频获取下来:

pattern = re.compile('"baseUrl":"(.*?)"')    # 构建正则表达式
pattern1 = re.compile('"title":"(.*?)",')    # 这里构建的正则表达式是为了获取视频标题,方便后续文件命名
lis = pattern.findall(direct)
lis0 = pattern1.findall(direct)    # 将所有“baseurl”获取下来
title = lis0[0].replace(' ', '_')

videoU = lis[0]    # 这里得到画面的url
audioU = lis[-1]    # 这里得到音频的url

video = requests.get(videoU, headers=headers).content
audio = requests.get(audioU, headers=headers).content

with open(self.path + '/' + 'audio.mp3', 'wb') as f:
    f.write(audio)
    f.close()
with open(self.path + '/' + 'video.mp4', 'wb') as f:
    f.write(video)
    f.close()

到这里我们就获取到音频和画面了,接下来我们需要将这两个文件合成为一个完整的视频,需要调用ffmpeg喵。

3. 合成视频

这里需要用到ffmpeg和Python中的ffmpeg库,需要提前下载ffmpeg哦!

ffmpeg官方网址FFmpeg

(下载完成后别忘了配置环境变量喵,具体操作这里暂且不做展开)

操作如下:

audio = ffmpeg.input('audio.mp3')
video = ffmpeg.input('video.mp4')

out = ffmpeg.output(video, audio, title + '.mp4')    # 合成视频
out.run()
os.remove('audio.mp3')    # 删除原有的音频文件
os.remove('video.mp4')    # 删除原有的画面文件

到这里就获取到完整的视频辣

当然,本文只是提供了一个简单的思路,实际可操作的方法还有很多。


我是若琼,一名来自南京邮电大学,爱好编程的大一学生,欢迎各位感兴趣的友友们与作者私信交流,也希望各位业内大佬能够多多批评指正喵。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以通过Fiddler来爬取B站App的视频信息。具体步骤如下: 1. 安装Fiddler,并启动。 2. 打开B站App,找到要爬取视频,播放一段时间。 3. 在Fiddler中,选择“Tools”菜单下的“Options”,在“HTTPS”选项卡中勾选“Decrypt HTTPS traffic”,并点击“Actions”按钮,选择“Export Root Certificate to Desktop”,将证书保存到桌面。 4. 在Python中,使用requests库发送请求时,设置代理为Fiddler的代理地址,例如: ``` import requests proxies = { "http": "http://127...1:8888", "https": "http://127...1:8888" } response = requests.get(url, proxies=proxies) ``` 5. 在Fiddler中,找到请求视频信息的请求,右键点击,选择“Copy” -> “Copy as cURL”,将请求转换为cURL格式。 6. 在Python中,使用curl-to-Python库将cURL转换为Python代码,例如: ``` from curl_to_requests import to_requests curl = 'curl "https://api.bilibili.com/x/player/playurl?cid=123456&avid=7890123&qn=80&type=&otype=json&fnver=&fnval=16&session=abc123" -H "User-Agent: Mozilla/5. (Windows NT 10.; Win64; x64; rv:88.) Gecko/20100101 Firefox/88." -H "Accept: */*" -H "Accept-Language: en-US,en;q=.5" --compressed -H "Referer: https://www.bilibili.com/video/BV12345678" -H "Origin: https://www.bilibili.com" -H "Connection: keep-alive"' requests_code = to_requests(curl) response = requests_code.run() ``` 7. 解析响应数据,获取视频信息。 以上就是通过Fiddler爬取B站App视频信息的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值