前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
事情是这样的,昨晚室友拉着我去他的电脑,说带我欣赏一点高雅的作品~
于是这一坐下,便是一晚上…
作为一个乐于分享的博主,本来我是决定直接分享的,
但是转念一想:有句俗话不是说授人以鱼不如授人以渔,
我还是直接出教程方便大家以后遇到了喜欢的,也能及时下载保存。
开发环境:
开发环境:
-
python 3.8 运行代码
-
pycharm 2022.3.2 辅助敲代码 专业版
-
ffmpeg
内置模块使用:
-
subprocess
-
re
第三方模块使用:
- requests 发送请求
第三方模块安装:
win + R 输入cmd 输入安装命令 pip install 模块名
(如果你觉得安装速度比较慢, 你可以切换国内镜像源)
完整源码、教程 点击此处跳转文末名片获取 ,我都放在这里了。
代码实现步骤
-
发送请求, 对于视频详情页url地址发送请求
-
获取数据, 获取响应体的文本数据 response.text
-
解析数据, 通过正则表达式提取数据内容: 视频标题 cid session
-
发送请求, 对于视频内容数据包url发送请求
-
获取数据, 获取响应体的json字典数据 response.json()
-
解析数据, 通过字典键值对取值, 提取音频url 视频url
-
保存数据, 对于音频url 视频url发送请求 获取响应体二进制数据response.content
-
合成数据, 把音频内容以及视频画面内容合成为一个完整的mp4文件
代码实现
1、发送请求
导入模块
import requests
import re
import subprocess
伪装浏览
headers = {
'referer': 'https://www.****.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
}
发送请求
def get_response(html_url):
response = requests.get(url=html_url, headers=headers)
return response
2、获取视频标题/cid/session
def get_video_info(html_url):
response = get_response(html_url)
cid = re.findall('"cid":(\d+),', response.text)[0]
session = re.findall('"session":"(.*?)"', response.text)[0]
title = re.findall('<h1 title="(.*?)" class="video-title">', response.text)[0].replace(' ', '')
video_info = [cid, session, title]
return video_info
3、获取音频url/视频url
def get_video_content(cid, session, bvid):
index_url = 'https://api.****.com/x/player/playurl'
data = {
'cid': cid,
'qn': '80',
'type': '',
'otype': 'json',
'fourk': '1',
'bvid': bvid,
'fnver': '0',
'fnval': '976',
'session': session,
}
json_data = requests.get(url=index_url, params=data, headers=headers).json()
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
video_content = [audio_url, video_url]
return video_content
4、保存数据
def save(name, audio_url, video_url):
audio_content = get_response(audio_url).content
video_content = get_response(video_url).content
with open(name + '.mp3', mode='wb') as a:
a.write(audio_content)
with open(name + '.mp4', mode='wb') as v:
v.write(video_content)
print(name, '保存成功')
5、合成视频
def merge_data(video_name):
print('视频合成开始:', video_name)
cmd = f"ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental {video_name}output.mp4"
# print(cmd)
subprocess.run(cmd, shell=True)
print('视频合成结束:', video_name)
尾语 💝
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!