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

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录

  • 1、任务目标
  • 2、网页分析
  • 3、代码编写

1、任务目标

目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验
要求:抓取该网址下的视频,将其存入本地,如下:

在这里插入图片描述

2、网页分析

在分析网页前,我们需要明白爬取的数据是什么,因为b站的视频跟音频是分开存放的,所以我们需要分别找到视频和音频的url,然后在对其发起请求将视频和音频保存至本地;最后将两者合并在一起,才能形成完整的视频文件

  1. 打开目标网站,大家可以先登录B站,这样才能下载高清视频,打开浏览器开发者模式,刷新网页,寻找数据接口
    在这里插入图片描述
  2. 经过分析,在Network-Doc下发现了一个文件,该文件源码中就存放了视频和音频的url地址,所以我们需要向该文件接口发起请求,将视频和音频的url地址解析出来

在这里插入图片描述

  1. 得到该数据接口的请求url和请求参数
    在这里插入图片描述

  2. 找到所需的数据接口后,我们可以先分析一下网页源码,我们发现视频url存放在一个 <script>标签下的 video
    在这里插入图片描述

  3. 我们需要获取的是 video下的 baseurl,但我们会发现这种url在video下有许多,他们其实代表着不同清晰度和不同编码,这里我教大家如何区分,首先id相同的表示是同一个清晰度的视频url,codes 代表着不同的编码格式;大家可以根据第3步图中信息判断清晰度,id=80就代表 高清1080p,因为我没有会员,这里最高只显示高清1080p的baseurl,所以我们就抓取它即可
    在这里插入图片描述

  4. 音频的url同样也在<script>标签下,我们向下翻,发现音频url在 audio 下的 baseUrl中,且下面有3种类型的baseurl,我们同样根据id来选择,视频url为高清1080p,所以音频就选择id=30280baseurl
    在这里插入图片描述

3、代码编写

编写代码前,需要大家安装一个第三方工具ffmpeg,用于合并视频和音频
安装教程:https://blog.csdn.net/qq_45956730/article/details/125272407


完整代码:

'''
目标站点:https://www.bilibili.com/video/BV1se41117WP/?vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a B站
任务:抓取网址下的视频,将其存入本地
'''# 导入模块
import requests
import re
import json
from jsonpath import jsonpath
from bs4 import BeautifulSoup
import os# 1、站点信息# 目标网站
url = 'https://www.bilibili.com/video/BV1se41117WP/'# 身份信息,若cookie值失效,刷新网页更换即可
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36","Referer":"https://www.bilibili.com/","Cookie":"i-wanna-go-back=-1; buvid4=3347E997-02D2-04C8-A7BF-156C62FCF90B88409-022070218-vps4PunhlmjD%2FldTeJtIPg%3D%3D; buvid_fp_plain=undefined; DedeUserID=131564301; DedeUserID__ckMd5=cd1905451e79f724; CURRENT_BLACKGAP=0; buvid3=256ABE92-A581-24BC-8E24-6FF290D67AAD49841infoc; b_nut=1698501949; b_ut=7; _uuid=E716FD102-B224-3AF5-BF13-7FFF9888B73450357infoc; rpdid=|(um)~|)kk)k0J'uYm)l|um~u; PVID=1; header_theme_version=CLOSE; enable_web_push=DISABLE; fingerprint=561ef2aee0e68972fc241f5969acd97b; hit-dyn-v2=1; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW3; CURRENT_FNVAL=4048; buvid_fp=561ef2aee0e68972fc241f5969acd97b; SESSDATA=33cf5dfb%2C1744988952%2Cb57ab%2Aa1CjBKimVs0wevrn9Ta4wYyhdBx-INz-37PGOJXhzOdeCNbnP3by5al9qZYhWgDs8BqO0SVk5MQzdsRzNWbWNaTHhWX3E1d1RKbl9WS3BGWjVudnpjd0d6NnV0ZWxYSU9FREktWlY0d2pMaU1LU1JVSUNZWFFtdDk1OEMyWFNickFCOFlncy1RYXR3IIEC; bili_jct=f6fe7d7a9e53628a226c3b5635076cbf; bp_t_offset_131564301=990413587237306368; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3Mjk2OTY0MzcsImlhdCI6MTcyOTQzNzE3NywicGx0IjotMX0.6xy7DMJZDMBJycpOYWnXejp5ihkcRy4mE85OBVgjUFU; bili_ticket_expires=1729696377; bmg_af_switch=1; bmg_src_def_domain=i0.hdslb.com; sid=6az7b526; CURRENT_QUALITY=64; home_feed_column=4; browser_resolution=1279-700; b_lsid=61131031F_192AE3E6666",
}# 请求参数、
param = {"vd_source":"e8e376ccbc5aa4cfd88e6a7917adfd1a",
}# 2、请求网站
def get():response = requests.get(url,headers=header,params=param) # 发起请求if response.status_code == 200:html_data = response.text # 返回网页源码data = re.findall('<script>window.__playinfo__=(.*?)</script>',html_data,re.S)[0] # 用正则将网页中script标签内的数据匹配出来json_data = json.loads(data) # 将匹配的数据转换为json格式,字典return html_data,json_data# 3、解析数据
def parse(html_data,json_data):soup = BeautifulSoup(html_data,'lxml') # 生成解析对象title = soup.select('div.title-txt')[0].string # 获取视频标题,有多种方法,大家自行选择# print(title)video_url = jsonpath(json_data,'$..data.dash.video..baseUrl')[0] # 获取视频链接# print(video_url)audio_url = jsonpath(json_data,'$..data.dash.audio..baseUrl')[0] # 获取音频链接# print(audio_url)return title,video_url,audio_url# 4、将视频存放至本地
def save(title,video_url,audio_url,path):print('视频和音频开始下载')video = requests.get(video_url,headers=header).content # 下载视频audio = requests.get(audio_url,headers=header).content # 下载音频# 保存视频with open(f'{path}{title}.mp4','wb') as f1: # 将视频保存至指定路径下f1.write(video)print('视频下载完成')# 保存音频with open(f'{path}{title}.mp3','wb') as f2: # 将音频保存至指定路径下f2.write(audio)print('音频下载完成')# 5、合并视频和音频
def craft(path,title):# 使用第三方工具ffmpeg,合成视频和音频的命令,参考:https://blog.csdn.net/bangongzhushou/article/details/140019824cmd = fr"ffmpeg -i {path}{title}.mp4 -i {path}{title}.mp3 -c:v copy -c:a aac -strict experimental -map 0:v -map 1:a {path}csdn\{title}.mp4 -loglevel quiet" # -loglevel quiet 表示隐藏日志,不加问题不大os.system(cmd) # 调用windows命令print('视频和音频合并完成') # 合并后会生成新的.MP4文件os.remove(f'{path}{title}.mp4') # 删除原有的视频文件os.remove(f'{path}{title}.mp3') # 删除原有的音频文件print(f'已删除原有的视频和音频文件')print('---'*10)# 6、启动函数
def start(path):# 依次调用定义的函数,完成视频抓取html_data, json_data = get()title, video_url, audio_url = parse(html_data, json_data)save(title, video_url, audio_url, path)craft(path, title)if __name__ == '__main__':path = 'F:/videoDownload/' # 视频存放的路径,大家自定义start(path)

执行效果:
在这里插入图片描述
在这里插入图片描述

相关文章:

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站&#xff1a;B站视频&#xff08;https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a&#xff09;&#xff0c;用于本文测验 要求&#xff1a;抓取该网址下的视频&…...

容灾与云计算概念

​​​​​​基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN&#xff0c;是storage area network的简称&#xff0c;翻译过来就是存储区域网络。 顾名思义&#xff0c;SAN首先是一个网络&#xff0c;其次它是关于存储的&#xff0c;区域则是指服务器和存储资…...

基于 Python 的自然语言处理系列(44):Summarization(文本摘要)

在这一部分中&#xff0c;我们将探讨如何使用 Transformer 模型将长文档压缩为摘要&#xff0c;这个任务被称为文本摘要。文本摘要是 NLP 领域中最具挑战性的任务之一&#xff0c;因为它需要理解长篇文本并生成连贯的总结&#xff0c;捕捉文档中的核心主题。然而&#xff0c;当…...

RabbitMQ安装部署

安装Erlang 由于RabbitMQ是用Erlang语言编写的&#xff0c;所以在安装RabbitMQ之前需要安装Erlang 安装依赖 [rootpro-ex ~]yum install make gcc gcc-c build-essential openssl openssl-devel unixODBC unixODBC-devel kernel-devel m4 ncurses-devel设置Eralng的存储库 […...

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台&#xff0c;求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才&#xff0c;求职者则通过上传简历寻找合适的工作。在这种复杂的场景中&#xff0c;我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…...

unplugin-auto-import 库作用

unplugin-auto-import是一个 Vite、Webpack 和 Rollup 的插件。 一、自动导入模块 1. 减少手动导入 在 JavaScript 和 TypeScript 项目中&#xff0c;它可以自动检测并导入常用的模块和函数&#xff0c;无需手动在每个文件中进行导入操作。这大大减少了代码中的重复性导入语…...

【Multisim14.0正弦波>方波>三角波】2022-6-8

缘由有没有人会做啊Multisim14.0-其他-CSDN问答参考方波、三角波、正弦波信号产生 - 豆丁网...

vue3纯前端验证码示例

前言 验证码的用途&#xff1a;通过要求用户输入一串难以被机器自动识别的字符或图像&#xff0c;有效阻止恶意用户或脚本通过暴力破解方式尝试登录账户。验证码的分类&#xff1a;常见的验证码有短信、文本、图形等&#xff0c;安全度越高&#xff0c;依赖的插件或服务也越多…...

招聘程序员

全栈总监❤️golang❤️UI设计师 ☀️前端☀️Nodejs工☀️平面设计☀️PHP工 ☀️安卓❤️Flutter❤️运维☀️爬虫 公司福利&#xff1a; ☃️ 带薪年假、年终奖、13k-18k薪 &#x1f3e9; 内宿 2人/间或外宿可补助 &#x1f4b5; 转正绩效 ✨节日礼金&#xff1a;生日礼金…...

Android 判断手机放置的方向

#1024程序员节&#xff5c;征文# 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 需求 老板&#xff1a;我有个手持终端&#xff0c;不能让他倒了&#xff0c;当他倒或者倾斜的时候要发出报警&#xff1b; 程序猿&#xff1a;我这..... 老板…...

Telegram机器人的手机部署

目的 一直有读 epub 电子书的习惯&#xff0c;摘录段落复制下来段落很难看&#xff0c;把自己写的排版器的逻辑复制下来&#xff0c;写成了一个排版机器人所有发给机器人的文字&#xff0c;都会经过排版&#xff0c;后转发到读书频道 前提 本来最好方法是直接把机器人架在服…...

ffmpeg视频滤镜: 色温- colortemperature

滤镜简述 colortemperature 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以调节图片的色温&#xff0c;色温值越大显得越冷&#xff0c;可以参考一下下图&#xff1a; 咱们装修的时候可能会用到&#xff0c;比如选择灯还有地板的颜色的时候&#xff0c;选暖色调还是…...

Django+Vue全栈开发项目入门(二)

Vue是一款用于构建用户界面的JavaScript渐进式框架&#xff0c;它基于标准HTML、CSS和JavaScript构建&#xff0c;并提供了一套声明式的、响应式的、组件化的编程模型&#xff0c;有助于高效地开发用户界面。 环境准备 安装Node.js&#xff1a;Vue项目的构建和运行依赖于Node…...

【ubuntu改源】

ubuntu改源 备份原始源查看ubuntu发行版本arm64 noble版本的源vim修改源更新系统软件源 备份原始源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.disabled查看ubuntu发行版本 lsb_release -aarm64 noble版本的源 清华源 vim修改源 esc :1,$d # 删除所有# 默认注…...

SQLI LABS | Less-9 GET-Blind-Time based-Single Quotes

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-9/ 靶场提示 …...

【小白学机器学习24】 用例子来比较:无偏估计和有偏估计

目录 1 关于无偏估计 1.1 无偏估计的定义 2 原始数据 2.1 假设我们是上帝&#xff0c;我们能创造一个总体/母体 population 2.2 按尽量随机取样的原则去取1个随机样本 sample1 3 一个关于无偏估计的理解 3.1 接着上面的总体和样本 sample1 3.2 左边的计算&#xff0c;期…...

C++在实际项目中的应用第二节:C++与网络编程

第五章&#xff1a;C在实际项目中的应用 第二节&#xff1a;C与网络编程 1. TCP/IP协议详解与C实现 TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是现代互联网通信的基础协议。理解 TCP/IP 协议对于开发网络应用至关重要。本节将详细介绍 TCP/IP 协议的工作原理以…...

依赖关系是危险的

依赖, 我们需要它们&#xff0c;但如何有效安全地使用它们&#xff1f;在本周的节目中&#xff0c;Kris 与 Ian 和 Johnny 一起讨论了 polyfill.io 供应链攻击、Go 中依赖管理和使用的历史&#xff0c;以及 Go 谚语“一点复制胜过一点依赖”。当然&#xff0c;我们用一些不受欢…...

ipguard与Ping32如何加密数据防止泄露?让企业信息更安全

在信息化时代&#xff0c;数据安全已成为企业运营的重中之重。数据泄露不仅会导致经济损失&#xff0c;还可能损害企业声誉。因此&#xff0c;选择合适的数据加密工具是保护企业敏感信息的关键。本文将对IPGuard与Ping32这两款加密软件进行探讨&#xff0c;了解它们如何有效加密…...

gitlab 的备份与回复

一、gitlab备份 1.确定备份目录 gitlab 默认的备份目录为/var/opt/gitlab/backups&#xff0c;可通过配置gitlab.rb配置文件进行修改&#xff0c;如&#xff1a; [rootlocalhost ~]# vim /etc/gitlab/gitlab.rb #若要修改备份文件的存储目录话&#xff0c;打开下面选项的注释…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

【Vue】scoped+组件通信+props校验

【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性&#xff0c; 令样式只作用于当前组件的标签 作用&#xff1a;防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...

汇编语言学习(三)——DoxBox中debug的使用

目录 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 二、debug是什么 三、debug中的命令 一、安装DoxBox&#xff0c;并下载汇编工具&#xff08;MASM文件&#xff09; 链接&#xff1a; https://pan.baidu.com/s/1IbyJj-JIkl_oMOJmkKiaGQ?pw…...