万网制作网站,长沙专业建网站公司,建设工程施工合同协议书,知乎 网站建设目录
一、任务分析
二、网页分析
三、任务实现 一、任务分析 将B站视频爬取并保存到本地#xff0c;经过分析可知可以分为四个步骤#xff0c;分别是#xff1a;
爬取视频页的网页源代码#xff1b;提取视频和音频的播放地址#xff1b;下载并保存视频和音频#x…目录
一、任务分析
二、网页分析
三、任务实现 一、任务分析 将B站视频爬取并保存到本地经过分析可知可以分为四个步骤分别是
爬取视频页的网页源代码提取视频和音频的播放地址下载并保存视频和音频合并视频和音频,使用ffmpeg模块
二、网页分析 在分析网页前需要明白爬取的数据是什么由于b站的视频跟音频是分开存放的所以我们需要分别找到视频和音频的url然后在对其发起请求将视频和音频保存至本地最后将两者合并在一起才能形成完整的视频文件。
1、先登录B站选择想要下载的视频打开浏览器开发者模式刷新网页寻找数据接口 2、经过分析在文档下发现了一个文件该文件源码中就存放了视频和音频的url地址向该文件接口发起请求将视频和音频的url地址解析出来 3、得到该数据接口的请求url和请求参数 4、找到所需的数据接口后先分析一下网页源码我们发现视频url存放在一个 script标签下的 video下发现音频url在 audio 下的 baseUrl中 三、任务实现 前期准备编写代码前需要大家安装一个第三方工具ffmpeg用于合并视频和音频。 代码实现 Author :江上挽风sty
Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
File :B站视频爬取
Time :2024/12/11 9:28
Motto:一直努力一直奋进保持平常心
import os
import pprint
import re# 1、爬取视频页的网页源代码
import requests
import json
from lxml import etree
header {referer: https://www.bilibili.com,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
}# 2、提取视频和音频的播放地址
def get_play_url(url):r requests.get(url, headersheader)# print(r.text)info re.findall(window.__playinfo__(.*?)/script, r.text)[0]video_url json.loads(info)[data][dash][video][0][baseUrl]audio_url json.loads(info)[data][dash][audio][0][baseUrl]# print(video_url)# print(audio_url)html etree.HTML(r.text)filename html.xpath(//h1/text())[0]# print(filename)return video_url, audio_url, filename# 3、下载并保存视频和音频
def download_files(video_url, audio_url, filename, video_path,audio_path):print(开始下载视频和音频)video_content requests.get(video_url, headersheader).contentaudio_content requests.get(audio_url, headersheader).contentwith open(f{video_path}/{filename}.mp4, wb) as f:f.write(video_content)print(视频部分下载完毕)with open(f{audio_path}/{filename}.mp3, wb) as f:f.write(audio_content)print(音频部分下载完毕)# 4、合并视频和音频,使用ffmpeg模块
def combin_video_audio(filename, video_path, audio_path):# cmd frffmpeg -i {video_path}{filename}.mp4 -i {audio_path}{filename}.mp3 -c:v copy -c:a aac -strict experimental -map 0:v -map 1:a {video_path}\output-{filename}.mp4 -loglevel quiet # -loglevel quiet 表示隐藏日志不加问题不大cmd frD:\ApplicationsSoftware\FFmpeg\ffmpeg-7.1-full_build\ffmpeg-7.1-full_build\bin\ffmpeg -i {video_path}/{filename}.mp4 -i {audio_path}/{filename}.mp3 -c:v copy -c:a aac -strict experimental -map 0:v -map 1:a {video_path}/output-{filename}.mp4 -loglevel quiet # -loglevel quiet 表示隐藏日志不加问题不大os.system(cmd)print(音频视频合并完毕)print(--*10)os.remove(f{video_path}/{filename}.mp4)os.remove(f{audio_path}/{filename}.mp3)print(已删除多余的文件)if __name__ __main__:# url https://www.bilibili.com/video/BV1AA4y1D7h2/?spm_id_from333.337.search-card.all.clickvd_sourced9407807cd22419d13fabdc976906958url https://www.bilibili.com/video/BV1F6qnYoEz1/?t6spm_id_from333.1007.tianma.3-3-9.clickvideo_path rD:\ProjectCode\Spider\StudySpider07\videosaudio_path rD:\ProjectCode\Spider\StudySpider07\audiovideo_url, audio_url, filename get_play_url(url)download_files(video_url, audio_url, filename, video_path, audio_path)combin_video_audio(filename, video_path, audio_path)