当前位置: 首页 > news >正文

Python爬取B站视频:封装一下

📚博客主页:knighthood2001
公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下)
🎃知识星球:【认知up吧|成长|副业】介绍
❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️
🙏笔者水平有限,欢迎各位大佬指点,相互学习进步!

全部代码

根据之前的文章,我们其实可以将其封装一下:

import requests
import re
import json
import os
import subprocess
# 函数:下载并保存视频和音频
def download_video_and_audio(url, headers):try:# 发送请求response = requests.get(url=url, headers=headers)response.raise_for_status()  # 如果响应状态不是200,将抛出异常html = response.text# 解析数据:提取视频标题title = re.findall('title="(.*?)"', html)[0]print(f"视频标题: {title}")# 解析视频信息info = re.findall('window.__playinfo__=(.*?)</script>', html)[0]json_data = json.loads(info)# 提取视频链接和音频链接video_url = json_data['data']['dash']['video'][0]['baseUrl']audio_url = json_data['data']['dash']['audio'][0]['baseUrl']print(f"视频链接: {video_url}")print(f"音频链接: {audio_url}")# 下载视频内容video_content = requests.get(url=video_url, headers=headers).content# 下载音频内容audio_content = requests.get(url=audio_url, headers=headers).contentif not os.path.exists('process_video'):os.makedirs('process_video')# 保存视频和音频数据with open(f'process_video\\{title}.mp4', mode='wb') as v:v.write(video_content)with open(f'process_video\\{title}.mp3', mode='wb') as a:a.write(audio_content)print("视频音频下载完成!")return title  # 返回视频标题except requests.exceptions.RequestException as e:print(f"请求错误: {e}")except json.JSONDecodeError:print("解析JSON时出错")except Exception as e:print(f"发生错误: {e}")def merge_video(title):print("开始合并视频...")if not os.path.exists('finally_video'):os.makedirs('finally_video')# 合并成完整的视频内容cmd = f'ffmpeg -hide_banner -i "process_video\\{title}.mp4" -i "process_video\\{title}.mp3" -c:v copy -c:a aac -strict experimental "finally_video\\{title}output.mp4"'# 调用命令subprocess.run(cmd)if __name__ == '__main__':# url = 'https://www.bilibili.com/video/BV1jt421c7yN/'# url = 'https://www.bilibili.com/video/BV1vx421D7AP/?share_source=copy_web&vd_source=80a8f348074649de1e18f1345dee7db3'# url = 'https://www.bilibili.com/video/BV1LT421S7sh'url = 'https://www.bilibili.com/video/BV1H1421i7g6/?spm_id_from=333.999.0.0&vd_source=2ab95dfa6677af399778850be1824b83'cookie = "buvid3=2844B77E-F527-FB05-1DF5-9FDF834AE3E888277infoc; b_nut=1709986388; i-wanna-go-back=-1; b_ut=7; _uuid=6577D687-BED9-9AE2-106A10-551210627F5AC88087infoc; enable_web_push=DISABLE; buvid4=5ED5B3A0-A998-7D47-3815-9AD9A1B27A4989131-024030912-0Fw3r6dKwZLwPoWOl%2F8HuA%3D%3D; CURRENT_FNVAL=4048; rpdid=|(u|Jmkkuukk0J'u~u|ulR~)~; header_theme_version=CLOSE; fingerprint=c27c0b59dd10dcdc4c14701a58f49669; buvid_fp_plain=undefined; LIVE_BUVID=AUTO6217111182462626; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW3; bp_video_offset_691902317=925084214145056785; DedeUserID=691902317; DedeUserID__ckMd5=ead312019baad7ed; CURRENT_QUALITY=80; home_feed_column=4; PVID=1; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTY1NjYyODAsImlhdCI6MTcxNjMwNzAyMCwicGx0IjotMX0.4OcEc8xnUd8GPCTUkZM9UBejaRUnP0dhhjgL_DuFkgY; bili_ticket_expires=1716566220; SESSDATA=8abf5422%2C1731859084%2Ce2fa9%2A51CjD4mACI26GPIuH7wAe_rVLLXDq2VIckm2YvNvZpeMgzOMZCFVGss2CRvlLzxdOTmpASVk9nbUJtTU1QaWFqcUw1aWN5M19UMW0zdkhsZkdHRFdHdTZ1VVEzRUFmVUtKejhfS3FraFZ5WGM1OUstS1ZyeGRDTDhLM2Z1ekFuN09FcXFyaWIzWElnIIEC; bili_jct=ecb04e890e743862a38e01c7f37e08dd; bp_t_offset_691902317=934571401762832385; buvid_fp=c27c0b59dd10dcdc4c14701a58f49669; b_lsid=CB3EFD71_18FA63D003A; bmg_af_switch=1; bmg_src_def_domain=i0.hdslb.com; browser_resolution=675-639"headers = {"Referer": url,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Cookie": cookie}# 调用函数title = download_video_and_audio(url, headers)merge_video(title)

并且针对之前没有将视频音频合并,我这里也添加了这个功能。但是需要ffmpeg.exe,大家应该知道这是个音视频处理工具,很多软件,其实你下载下来,其中就会包含ffmpeg.exe。

在这里插入图片描述
需要ffmpeg.exe的可以上网找找,也可以私信我。

下载视频音频

首先,我构造了下载视频音频的函数,并且用try expect进行解决报错。

下载下来的视频音频都会保存在process_video文件夹中。

并且读取title作为文件名称。

合并视频音频

接着,我将视频音频进行读取,并通过subprocess库进行运行cmd命令,实现通过ffmpeg将视频音频合并到指定目录下。

注意

  • 你需要更改你要爬取的视频网址,以及更改cookie为你自己的cookie(cookie会过期,需要自己即使更新一下)。
  • 你需要ffmpeg.exe,这是实现视频音频合并的关键。

相关文章:

Python爬取B站视频:封装一下

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…...

Android Low Storage机制之DeviceStorageMonitorService

一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块&#xff0c;主要用来&#xff1a; 1.监视设备存储&#xff08;“/ data”&#xff09;。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…...

1105: 交换二叉树的孩子结点

解法&#xff1a; #include<iostream> using namespace std; struct treeNode {char val;treeNode* left, * right;treeNode(char x) :val(x), left(NULL), right(NULL) {}; }; treeNode* buildtree() {char ch;cin >> ch;if (ch #) return NULL;treeNode* r ne…...

TensorFlow.js

什么是 TensorFlow.js&#xff1f; TensorFlow.js 是一个基于 JavaScript 的机器学习库&#xff0c;它是 Google 开发的 TensorFlow 的 JavaScript 版本。它使得开发者能够在浏览器中直接运行机器学习模型&#xff0c;而不需要依赖于后端服务器或云服务。TensorFlow.js 的主要…...

131. 面试中关于架构设计都需要了解哪些内容?

文章目录 一、社区系统架构组件概览1. 系统拆分2. CDN、Nginx静态缓存、JVM本地缓存3. Redis缓存4. MQ5. 分库分表6. 读写分离7. ElasticSearch 二、商城系统-亿级商品如何存储三、对账系统-分布式事务一致性四、统计系统-海量计数六、系统设计 - 微软1、需求收集2、顶层设计3、…...

Nodejs+Websocket+uniapp完成聊天

前言 最近想做一个聊天&#xff0c;但是网上的很多都是不能实现的&#xff0c;要么就是缺少代码片段很难实现websocket的链接&#xff0c;更别说聊天了。自己研究了一番之后实现了这个功能。值得注意的是&#xff0c;我想在小程序中使用socket.io&#xff0c;不好使&#xff0…...

神经网络学习

神经网络学习 导语数据驱动驱动方法训练/测试数据 损失函数均方误差交叉熵误差mini-batch 数值微分梯度梯度法神经网络梯度 学习算法的实现随机梯度下降2层神经网络实现mini-batch实现 总结参考文献 导语 神经网络中的学习指从训练数据中自动获取最优权重参数的过程&#xff0…...

CentOS部署NFS

NFS服务端 部署NFS服务端 sudo yum install -y nfs-utils挂载目录 给 NFS 指定一个存储位置&#xff0c;也就是网络共享目录。一般来说&#xff0c;应该建立一个专门的 /data 目录&#xff0c;方便起见使用临时目录 /tmp/nfs&#xff1a; mkdir -p /tmp/nfs #修改权限 chmo…...

JWT使用方法

目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点…...

使用鱼香肉丝一键安装重新安装ROS后mavros节点报错,.so文件不匹配

解决方案&#xff1a; 1、写在mavros相关软件&#xff0c;共卸载7个包 sudo apt-get remove ros-melodic-mav*2、重新安装mavros&#xff0c;共安装10个包 sudo apt-get remove ros-melodic-mav*...

STM32+CubeMX移植SPI协议驱动W25Q16FLash存储器

STM32CubeMX移植SPI协议驱动W25Q16FLash存储器 SPI简介拓扑结构时钟相位&#xff08;CPHA&#xff09;和时钟极性&#xff08; CPOL&#xff09; W25Q16简介什么是Flash&#xff0c;有什么特点&#xff1f;W25Q16内部块、扇区、页的划分引脚定义通讯方式控制指令原理图 CubeMX配…...

gpt-4o考场安排

说明 &#xff1a;经过多次交互&#xff0c;前后花了几个小时&#xff0c;总算完成了基本功能。如果做到按不同层次分配考场&#xff0c;一键出打印结果就完美了。如果不想看中间“艰苦”的过程&#xff0c;请直接跳到“最后结果”及“食用方法”。中间过程还省略了一部分交互&…...

【Unity AR开发插件】四、制作热更数据-AR图片识别场景

专栏 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 链接&#xff1a; Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…...

Spring AOP的实操 + 原理(动态代理)

1 什么是Spring AOP 要想知道Spring AOP那必然是是要先知道什么是AOP了: AOP&#xff0c;全称为 Aspect-Oriented Programming&#xff08;面向切面编程&#xff09;&#xff0c;是一种编程范式&#xff0c;用于提高代码的模块化&#xff0c;特别是横切关注点&#xff08;cros…...

16.线性回归代码实现

线性回归的实操与理解 介绍 线性回归是一种广泛应用的统计方法&#xff0c;用于建模一个或多个自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xff09;之间的线性关系。在机器学习和数据科学中&#xff0c;线性回归是许多入门者的第一个模型&#xff0c;它…...

Java进阶学习笔记1——课程介绍

课程适合学习的人员&#xff1a; 1&#xff09;具备一定java基础的人员&#xff1b; 2&#xff09;想深刻体会Java编程思想&#xff0c;成为大牛的人员&#xff1b; 学完有什么收获&#xff1f; 1&#xff09;掌握完整的Java基础技术体系&#xff1b; 2&#xff09;极强的编…...

【全开源】沃德商协会管理系统源码(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0c;有效快速建立…...

python毕设项目选题汇总(全)

各位计算机方面的毕业生们&#xff0c;是不是在头疼毕业论文写什么呢&#xff0c;我这给大家提供点思路&#xff1a; 网站系统类 《基于python的招聘数据爬虫设计与实现》 《基于python和Flask的图书管理系统》 《基于照片分享的旅游景点推荐系统》 《基于djangoxadmin的学生信…...

c#从数据库读取数据到datagridview

从已有的数据库读取数据显示到winform的datagridview控件&#xff0c;具体代码如下&#xff1a; //判断有无表 if (sqliteConn.State ConnectionState.Closed) sqliteConn.Open(); SQLiteCommand mDbCmd sqliteConn.CreateCommand(); m…...

训练YOLOv9-S(注意:官方还没有提供YOLOv9-S的网络,我这是根据网络博客进行的步骤,按照0.33、0.50比例调整网络大小,参数量15.60M,计算量67.7GFLOPs)

文章目录 1、自己动手制造一个YOLOv9-S网络结构1.1 改前改后的网络结构&#xff08;参数量、计算量&#xff09;对比1.2 一些发现&#xff0c;YOLOv9代码打印的参数量计算量和Github上提供的并不一致&#xff0c;甚至yolov9-c.yaml代码打印出来是Github的两倍1.3 开始创造YOLOv…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...