python 爬取某站视频

也是感觉好久都没有写博客了,主要是因为学业繁忙(其实是想多摆烂一会儿。。。)

在这里插入图片描述
距离暑假还有一个月,各科老师也开始布置相关的期末考试内容了。。。。。。

最近英语老师给我们留了一个期末作业(大学牲又要忙起来了),内容是拍摄一个短视频,既然是视频那素材是少不了的(我还是负责剪辑),于是我们组员开始在某站上寻找素材,找到视频发现下载不了视频,本来是想着既然下载不了,那就直接录屏吧。But,我又觉得既然学了爬虫那就要把它利用起来,顺便就当复习一下相关知识(也是好久没有写爬虫了)。

接下来让我们可以如何爬取某站上的视频吧,
话不多说直接上代码:

import requests,json,pprint,re
import os
from moviepy.editor import *

""" 获取url响应体 """
def getResponse(url):
    # 设置请求头
    # referer:必须要设置,否则会返回403没有权限访问,加上这段就代表我们是从哪个网页请求过来的
    # User-Agent:设置浏览器标识
    headers = {
    
    
        'referer':'https://www.bilibili.com/',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
    }
    """发起get请求"""
    response = requests.get(url=url,headers=headers)
    return response

""" 解析响应体 """
def parseResponse(url):
    # 获取url响应体
    response = getResponse(url)
    # 用正则表达式取出返回的视频数据
    html_data = re.findall('<script>window.__playinfo__=(.*?)</script>',response.text)[0]
    # 解析成json数据
    JsonData = json.loads(html_data)
    # 获取视频标题
    videoTitle= re.findall('<title data-vue-meta="true">(.*?)</title>',response.text)[0]
    # 获取音频
    audioUrl = JsonData['data']['dash']['audio'][0]['baseUrl']
    # 获取视频
    videoUrl = JsonData['data']['dash']['video'][0]['baseUrl']
    # 封装视频信息
    videoInfo = {
    
    
        'videoTitle':videoTitle,
        'audioUrl':audioUrl,
        'videoUrl':videoUrl,
    }
    print("获取Response信息成功!")
    return videoInfo

""" 保存视频 """
def videoSave(fileName,audioUrl,videoUrl):
    # 获取音频和视频的二进制内容
    audioResponse = getResponse(audioUrl).content
    videoResponse = getResponse(videoUrl).content
    # 写入文件
    with open('./video/'+fileName+'.mp3',mode='wb') as f:
        f.write(audioResponse)
        f.close()
    with open('./video/'+fileName+'.mp4',mode='wb') as f:
        f.write(videoResponse)
        f.close()
    print("保存视频成功!")

""" 合并音频和视频 """
def AvMerge(Mp3Name,Mp4Name,savePath):
    print("开始合并音频和视频.........")
    video = VideoFileClip(Mp4Name)
    audio = AudioFileClip(Mp3Name)
    video_merge = video.set_audio(audio)
    video_merge.write_videofile(savePath)
    os.remove(Mp3Name)
    os.remove(Mp4Name)
    print("合并成功!")
def main():
    url = input("请输入B站视频url地址:")
    videoBaseUrl = 'D:\\desktop\\Code\\pythonCode\\B站视频爬取\\'
    videoInfo = parseResponse(url)
    videoSave(videoInfo['videoTitle'],videoInfo['audioUrl'],videoInfo['videoUrl'])
    fileName = videoInfo['videoTitle']
    AvMerge(videoBaseUrl+'video\\'+fileName+'.mp3',videoBaseUrl+'video\\'+fileName+'.mp4',videoBaseUrl+'\\video\\'+'merge'+fileName+'.mp4')
if __name__ == '__main__':
    main()

以上就是爬取视频的代码,基本上每个地方都有注释,相信有爬虫基础的小伙伴都能看懂,一个视频会爬了,那批量爬取就不是什么难事了,我这里的是单视频爬取,有兴趣的小伙伴也可以自己实现一个批量视频爬取。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lx00000025/article/details/131020951