bilibili上爬取视频

2023-11-10 18:51
文章标签 视频 bilibili 上爬

本文主要是介绍bilibili上爬取视频,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 一、bilibili视频的URL结构

人员素质测评理论与方法-06090-人力资源管理本科-江苏省高等教育自学考试_哔哩哔哩_bilibili

URL+P(参数)

二、编写程序输入URL和起始终止P

    # 输入bilibili视频的BV号# bv = input('视频BV号:')bv = 'BV15v411k75j'url = 'https://www.bilibili.com/video/' + bv# 选择视频从第几p开始到第几p结束# startPart = input('起始P:')startPart = 58# endPart = input('终止P;')endPart = 100

三、解析网页Chrome+F12,在<head>标签里,找到包含‘baseUrl’的<script>标签 具体是第几个,修改://head/script[5]/text()

ideoPlayInfo = str(_element.xpath('//head/script[5]/text()')[0].encode('utf-8').decode('utf-8'))[20:]

 找到User-Agent,替换headers

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36','Refer''er': 'https://www.bilibili.com/'}

 

四、下载视频和音频

区分GET和OPTION模式

五、合并视频和音频 

ffmpeg实现时频和音频合并

def combineVideoAudio(videopath, audiopath, outpath):#command = 'E:\\FFmpeg\\bin\\ffmpeg.exe -i ' + '"' + audioDir + '"' ' -i ' + '"' + videoDir + '"' + ' -acodec copy -vcodec copy ' + '"' + outDir + '"'subprocess.call(("E:/ffmpeg/bin/ffmpeg -i " + videopath + " -i " + audiopath + " -vcodec copy -acodec copy " + outpath).encode("utf-8").decode("utf-8"), shell=True)os.remove(videopath)os.remove(audiopath)

整体下载源代码: 

import jsonimport osimport subprocessimport requestsfrom lxml import etreeimport shutil
# 防止因https证书问题报错requests.packages.urllib3.disable_warnings()headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3970.5 Safari/537.36','Refer''er': 'https://www.bilibili.com/'}'''获取bilibili视频的主要函数@param url 视频页面url 结构为:url?参数@param p 视频p数@param bv 视频bv数'''def getBiliBiliVideo(url, p, bv):session = requests.session()res = session.get(url=url, headers=headers, verify=False)_element = etree.HTML(res.content)# 获取window.__playinfo__的json对象,[20:]表示截取'window.__playinfo__='后面的json字符串videoPlayInfo = str(_element.xpath('//head/script[5]/text()')[0].encode('utf-8').decode('utf-8'))[20:]videoJson = json.loads(videoPlayInfo)# 获取视频链接和音频链接try:# 2018年以后的b站视频由.audio和.video组成videoURL = videoJson['data']['dash']['video'][0]['baseUrl']audioURl = videoJson['data']['dash']['audio'][0]['baseUrl']flag = 0except Exception:# 2018年以前的b站视频音频视频结合在一起,后缀为.flvvideoURL = videoJson['data']['durl'][0]['url']flag = 1# 指定文件生成目录,如果不存在则创建目录dirname = ("E:/result").encode("utf-8").decode("utf-8")if not os.path.exists(dirname):os.makedirs(dirname)print('文件夹创建成功!')# 获取每一集的名称name = bv + "-" + str(p)# 下载视频和音频print('正在下载 "' + name + '" 的视频····')fileDownload(homeurl=url, url=videoURL, name='E:/result/' + name + '_Video.mp4', session=session)if flag == 0:print('正在下载 "' + name + '" 的音频····')fileDownload(homeurl=url, url=audioURl, name='E:/result/' + name + '_Audio.mp3', session=session)print('正在组合 "' + name + '" 的视频和音频····')combineVideoAudio('E:/result/' + name + '_Video.mp4', 'E:/result/' + name + '_Audio.mp3','E:/result/Bilibili' + name + '_output.mp4')print(' "' + name + '" 下载完成!')'''使用session保持会话下载文件@param homeurl 访问来源@param url 音频或视频资源的链接@param name 下载后生成的文件名@session 用于保持会话
'''def fileDownload(homeurl, url, name, session=requests.session()):# 添加请求头键值对,写上 refered:请求来源headers.update({'Referer': homeurl})# 发送option请求服务器分配资源session.options(url=url, headers=headers, verify=False)# 指定每次下载1M的数据begin = 0end = 1024 * 512 - 1flag = 0while True:# 添加请求头键值对,写上 range:请求字节范围headers.update({'Range': 'bytes=' + str(begin) + '-' + str(end)})# 获取视频分片res = session.get(url=url, headers=headers, verify=False)if res.status_code != 416:# 响应码不为为416时有数据begin = end + 1end = end + 1024 * 512else:headers.update({'Range': str(end + 1) + '-'})res = session.get(url=url, headers=headers, verify=False)flag = 1with open(name.encode("utf-8").decode("utf-8"), 'ab') as fp:fp.write(res.content)fp.flush()# data=data+res.contentif flag == 1:fp.close()break'''用于合并音频与视频@param videopath 视频路径@param audiopath 音频路径@param outpath 生成合并视频的路径'''def combineVideoAudio(videopath, audiopath, outpath):#command = 'E:\\FFmpeg\\bin\\ffmpeg.exe -i ' + '"' + audioDir + '"' ' -i ' + '"' + videoDir + '"' + ' -acodec copy -vcodec copy ' + '"' + outDir + '"'subprocess.call(("E:/ffmpeg/bin/ffmpeg -i " + videopath + " -i " + audiopath + " -vcodec copy -acodec copy " + outpath).encode("utf-8").decode("utf-8"), shell=True)os.remove(videopath)os.remove(audiopath)if __name__ == '__main__':# 输入bilibili视频的BV号# bv = input('视频BV号:')bv = 'BV15v411k75j'url = 'https://www.bilibili.com/video/' + bv# 选择视频从第几p开始到第几p结束# startPart = input('起始P:')startPart = 58# endPart = input('终止P;')endPart = 100for p in range(int(startPart), int(endPart) + 1):getBiliBiliVideo(url + '?p=' + str(p), p, bv)

这篇关于bilibili上爬取视频的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384612

相关文章

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是: