网站留言短信提醒,深圳公司网站制作企业,做网站需要些什么资料,公司的网络规划与设计目标网址:为了1/4螺口买小米SU7#xff0c;开了一个月#xff0c;它值吗#xff1f;_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析:
视频的名称 F12 打开开发者工具 or 右击…目标网址:为了1/4螺口买小米SU7开了一个月它值吗_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析:
视频的名称 F12 打开开发者工具 or 右击点检查分析包含视频下载链接的数据包发送请求 解析数据 下载到本地
打开开发者工具 刷新页面 等待数据包的加载 点击网络(network)下面的媒体 此筛选的为视频文件 发现没有数据包返回 接着我们点击XHR 动态加载数据 --- 左边的.m4都为视频文件 点击一个数据包 复制里面url的一段参数 找到总的接口 搜索出来有很多一样的数据包 就是刚刚看到的 找到唯一不同的接口 这里面有我们想要的视频名字和下载链接 接着点击响应 CtrlF 打开快捷键搜索 所需要的视频名称 往下拉 下面有视频下载地址 和音频下载地址 # Explain: B站的视频和音频是分开的 我们可以通过下载一个软件来合并 或者通过剪视频软件合成
分析完毕,开始写代码
第一步 模拟浏览器向服务器发送请求
复制标头中的请求URL地址构建请求头提取数据保存数据
#导包
import requestsurl https://www.bilibili.com/video/BV1Cw4m1U7kS/?spm_id_from333.337.search-card.all.clickvd_sourcebc0862702cb8c55fb7829d6676ee3f45headers {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/
}
resp requests.get(urlurl, headersheaders)
提取数据 --使用正则提取 视频标题
# 导包
import re
# 获取视频名称 对列表取值
v_name re.findall(rtitle data-vue-metatrue(.*?)_哔哩哔哩_bilibili/title, resp.text)[0].replace(, ).replace(/, ) 上图的代码 可以通过 pprint.pprint(content) 格式化打印 方便取值
content re.findall(rscriptwindow.__playinfo__(.*?)/script, resp.text)[0]
# 将获取到的数据转换为JSON格式的
json_data json.loads(content)
# 通过键值对取值 提取视频 音频的下载链接
a_url json_data[data][dash][audio][0][baseUrl]
v_url json_data[data][dash][video][0][baseUrl]
保存数据 --发送请求获取二进制的数保存到本地
# 图片 视频 音频等都是以二进制的格式保存
a_content requests.get(urla_url, headersheaders).content
v_content requests.get(urlv_url, headersheaders).content
with open(v_name.mp3, wb) as f:f.write(a_content)
with open(v_name.mp4, wb) as f:f.write(v_content) 视频和音频保存完毕 接着就是将其合并 进入这个官网 下载软件并解压 然后配置环境变量 Builds - CODEX FFMPEG gyan.dev 往下拉 找到release builds 下载如下图箭头的zip压缩包 然后找到解压缩的文件 复制到bin目录 例如我的是 C:\下载\ffmpeg-7.0.2-essentials_build\bin
右击此电脑的属性 高级系统设置 添加到环境变量中就可以了 #导包
import subprocess
def combine_audio_video(video_path, audio_path, output_path):# 使用 subprocess 模块调用 ffmpeg 命令行工具避免 shell 命令注入风险command [ffmpeg, -i, video_path, -i, audio_path, -c:v, copy, -c:a, aac, -strict, experimental, output_path]subprocess.run(command)# 提供视频和音频的文件路径
video_path 为了14螺口买小米SU7开了一个月它值吗.mp4
audio_path 为了14螺口买小米SU7开了一个月它值吗.mp3
output_path all.mp4
combine_audio_video(video_path, audio_path, output_path)
出现这串代码时 就合并成功啦 以下是本次的源码 供大家参考学习使用
import json
import pprint
import re
import requests
import subprocessurl https://www.bilibili.com/video/BV1Cw4m1U7kS/?spm_id_from333.337.search-card.all.clickvd_sourcebc0862702cb8c55fb7829d6676ee3f45headers {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/
}
resp requests.get(urlurl, headersheaders)
# 获取视频名称 对列表取值
v_name re.findall(rtitle data-vue-metatrue(.*?)_哔哩哔哩_bilibili/title, resp.text)[0].replace(,).replace(/, )content re.findall(rscriptwindow.__playinfo__(.*?)/script, resp.text)[0]
json_data json.loads(content)
a_url json_data[data][dash][audio][0][baseUrl]
v_url json_data[data][dash][video][0][baseUrl]
a_content requests.get(urla_url, headersheaders).content
v_content requests.get(urlv_url, headersheaders).content# with open(v_name.mp3, wb) as f:
# f.write(a_content)
# with open(v_name.mp4, wb) as f:
# f.write(v_content)def combine_audio_video(video_path, audio_path, output_path):# 使用 subprocess 模块调用 ffmpeg 命令行工具避免 shell 命令注入风险command [ffmpeg, -i, video_path, -i, audio_path, -c:v, copy, -c:a, aac, -strict, experimental, output_path]subprocess.run(command)video_path 为了14螺口买小米SU7开了一个月它值吗.mp4
audio_path 为了14螺口买小米SU7开了一个月它值吗.mp3
output_path all.mp4
combine_audio_video(video_path, audio_path, output_path)本次的案例分析就到此结束啦 感谢大家的观看 您的点赞和关注是我更新的动力