爬虫基础之爬取某站视频

目标网址:为了1/4螺口买小米SU7,开了一个月,它值吗?_哔哩哔哩_bilibili

本案例所使用到的模块
requests (发送HTTP请求)subprocess(执行系统命令)
re (正则表达式操作)json (处理JSON数据)


需求分析:

  1. 视频的名称  F12 打开开发者工具 or 右击点检查
  2. 分析包含视频下载链接的数据包
  3. 发送请求  解析数据  下载到本地

打开开发者工具 刷新页面 等待数据包的加载
点击网络(network)下面的媒体 此筛选的为视频文件 发现没有数据包返回

 接着我们点击XHR 动态加载数据 --- 左边的.m4都为视频文件 点击一个数据包 复制里面url的一段参数 找到总的接口

搜索出来有很多一样的数据包 就是刚刚看到的 找到唯一不同的接口
这里面有我们想要的视频名字和下载链接

接着点击响应  Ctrl+F 打开快捷键搜索 所需要的视频名称


 

往下拉 下面有视频下载地址 和音频下载地址
# Explain: B站的视频和音频是分开的 我们可以通过下载一个软件来合并 或者通过剪视频软件合成

分析完毕,开始写代码

第一步 模拟浏览器向服务器发送请求
       

  1. 复制标头中的请求URL地址
  2. 构建请求头
  3. 提取数据
  4. 保存数据
#导包
import requests

url = 'https://www.bilibili.com/video/BV1Cw4m1U7kS/?spm_id_from=333.337.search-card.all.click&vd_source=bc0862702cb8c55fb7829d6676ee3f45'

headers = {
    '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',
    'referer':
        'https://www.bilibili.com/'
}
resp = requests.get(url=url, headers=headers)

提取数据 --使用正则提取 视频标题

# 导包
import re
# 获取视频名称 对列表取值
v_name = re.findall(r'<title data-vue-meta="true">(.*?)_哔哩哔哩_bilibili</title>', resp.text)[0].replace('?', '').replace('/', '')

 上图的代码 可以通过 pprint.pprint(content) 格式化打印 方便取值

content = re.findall(r'<script>window.__playinfo__=(.*?)</script>', resp.text)[0]
# 将获取到的数据转换为JSON格式的
json_data = json.loads(content)
# 通过键值对取值 提取视频 音频的下载链接
a_url = json_data["data"]["dash"]["audio"][0]["baseUrl"]
v_url = json_data["data"]["dash"]["video"][0]["baseUrl"]

保存数据 --发送请求获取二进制的数保存到本地

# 图片 视频 音频等都是以二进制的格式保存
a_content = requests.get(url=a_url, headers=headers).content
v_content = requests.get(url=v_url, headers=headers).content
with open(v_name+'.mp3', 'wb') as f:
    f.write(a_content)
with open(v_name+'.mp4', 'wb') as f:
    f.write(v_content)

视频和音频保存完毕  接着就是将其合并 

 进入这个官网 下载软件并解压 然后配置环境变量    Builds - CODEX FFMPEG @ gyan.dev

  往下拉  找到release builds 下载如下图箭头的zip压缩包

然后找到解压缩的文件 复制到bin目录  例如我的是 C:\下载\ffmpeg-7.0.2-essentials_build\bin

右击此电脑的属性  高级系统设置

添加到环境变量中就可以了

#导包
import subprocess
def combine_audio_video(video_path, audio_path, output_path):
    # 使用 subprocess 模块调用 ffmpeg 命令行工具,避免 shell 命令注入风险
    command = ['ffmpeg', '-i', video_path, '-i', audio_path, '-c:v', 'copy', '-c:a', 'aac', '-strict', 'experimental', output_path]
    subprocess.run(command)

# 提供视频和音频的文件路径
video_path = '为了14螺口买小米SU7,开了一个月,它值吗.mp4'
audio_path = '为了14螺口买小米SU7,开了一个月,它值吗.mp3'
output_path = 'all.mp4'
combine_audio_video(video_path, audio_path, output_path)

出现这串代码时 就合并成功啦 

以下是本次的源码 供大家参考学习使用

import json
import pprint
import re
import requests
import subprocess


url = 'https://www.bilibili.com/video/BV1Cw4m1U7kS/?spm_id_from=333.337.search-card.all.click&vd_source=bc0862702cb8c55fb7829d6676ee3f45'

headers = {
    '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',
    'referer':
        'https://www.bilibili.com/'
}
resp = requests.get(url=url, headers=headers)
# 获取视频名称 对列表取值
v_name = re.findall(r'<title data-vue-meta="true">(.*?)_哔哩哔哩_bilibili</title>', resp.text)[0].replace('?',
                                                                                                          '').replace(
    '/', '')

content = re.findall(r'<script>window.__playinfo__=(.*?)</script>', resp.text)[0]
json_data = json.loads(content)
a_url = json_data["data"]["dash"]["audio"][0]["baseUrl"]
v_url = json_data["data"]["dash"]["video"][0]["baseUrl"]
a_content = requests.get(url=a_url, headers=headers).content
v_content = requests.get(url=v_url, headers=headers).content


# with open(v_name+'.mp3', 'wb') as f:
#     f.write(a_content)
# with open(v_name+'.mp4', 'wb') as f:
#     f.write(v_content)



def combine_audio_video(video_path, audio_path, output_path):
    # 使用 subprocess 模块调用 ffmpeg 命令行工具,避免 shell 命令注入风险
    command = ['ffmpeg', '-i', video_path, '-i', audio_path, '-c:v', 'copy', '-c:a', 'aac', '-strict', 'experimental', output_path]
    subprocess.run(command)


video_path = '为了14螺口买小米SU7,开了一个月,它值吗.mp4'
audio_path = '为了14螺口买小米SU7,开了一个月,它值吗.mp3'
output_path = 'all.mp4'
combine_audio_video(video_path, audio_path, output_path)

本次的案例分析就到此结束啦 感谢大家的观看 您的点赞和关注是我更新的动力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/958965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第五天 Labview数据记录(5.1 INI配置文件读写)

5.1 INI配置文件读写 INI配置文件是一种简单的文本文件&#xff0c;通常用于存储软件的配置信息。它具有以下作用&#xff1a; 存储软件配置参数方便软件的维护和更新提高软件的灵活性和可扩展性便于用户修改和共享配置 5.1.1 前面板 1&#xff09;新建项目SaveData_Exampl…

springboot 文件下载

在springboot中&#xff0c;执行如下代码实现文件下载 GetMapping("/file/download/test")public void Download(HttpServletResponse response){try {String path "XXXXXXXXXXXX";//文件路径File file new File(path);// 读到流中InputStream inputStre…

PaddleSeg 从配置文件和模型 URL 自动化运行预测任务

git clone https://github.com/PaddlePaddle/PaddleSeg.git# 在ipynb里面运行 cd PaddleSegimport sys sys.path.append(/home/aistudio/work/PaddleSeg)import os# 配置文件夹路径 folder_path "/home/aistudio/work/PaddleSeg/configs"# 遍历文件夹&#xff0c;寻…

三维激光扫描-用智能检测系统提升效率

当下&#xff0c;企业对生产效率和质量控制的要求越来越高。传统的检测方法往往难以满足高精度、快速响应的需求。三维激光扫描技术结合智能检测系统&#xff0c;为工业检测带来了革命性的变革。 传统检测方法的局限性 传统检测方法主要依赖于人工测量和机械检测工具&#xf…

WebAssembly视频检测在社区创作平台的落地与实践 | 得物技术

一、背景&现状 创作者服务平台作为得物为社区创作者提供的PC端视频发布入口&#xff0c;地位非常重要。且随着功能的升级迭代&#xff0c;用户群体也越来越多。但我们偶尔会收到如下反馈&#xff1a; 视频损坏&#xff0c;无法播放视频模糊曝光度问题黑屏&#xff0c;只有…

Poetry shell --> poetry-plugin-shell

当前环境&#xff1a;Poetry (version 2.0.1) python Python 3.11.8 根据&#xff1a;https://python-poetry.org/docs/managing-environments/#bash-csh-zsh 在新版本的 poetry 执行 poetry shell 会报错 这个功能目前需要使用 poetry-plugin-shell 插件 关于 poetry-plugin-s…

《论文翻译》KIMI K1.5:用大语言模型扩展强化学习

文章目录 KIMI K1.5技术报告摘要 1. 引言2. 方法&#xff1a;基于大语言模型的强化学习2.1 强化学习提示集整理2.2 长思维链监督微调2.3 强化学习2.3.1 问题设定2.3.2 策略优化2.3.3 长度惩罚2.3.4 采样策略2.3.5 训练方法的更多细节 2.4 长到短&#xff1a;短思维链模型的上下…

Linux 安装 Nirgam

目录 Linux 安装 Nirgam声明安装 错误修正⭐修正后需要重新编译 参考资料 Linux 安装 Nirgam 声明 ⭐make失败调整重试前一定先 make clean 一下&#xff01;&#xff01;&#xff01;特别感谢一篇博客园的博客&#xff08;参考文献1&#xff09;&#xff0c;帮我解决了很多问…

分享一款开源好用的博客管理系统

ThriveX 现代化博客管理系统 &#x1f389; &#x1f525; 首先最重要的事情放第一 开源不易&#xff0c;麻烦占用 10 秒钟的时间帮忙点个免费的 Star&#xff0c;再此万分感谢&#xff01; 下面开始进入主题↓↓↓ &#x1f308; 项目介绍&#xff1a; Thrive 是一个简而不…

Kafka 深入服务端 — 时间轮

Kafka中存在大量的延迟操作&#xff0c;比如延时生产、延时拉取和延时删除等。Kafka基于时间轮概念自定义实现了一个用于延时功能的定时器&#xff0c;来完成这些延迟操作。 1 时间轮 Kafka没有使用基于JDK自带的Timer或DelayQueue来实现延迟功能&#xff0c;因为它们的插入和…

九、CSS工程化方案

一、PostCSS介绍 二、PostCSS插件的使用 项目安装 - npm install postcss-cli 全局安装 - npm install postcss-cli -g postcss-cli地址&#xff1a;GitHub - postcss/postcss-cli: CLI for postcss postcss地址&#xff1a;GitHub - postcss/postcss: Transforming styles…

FFPlay命令全集合

FFPlay是以FFmpeg框架为基础&#xff0c;外加渲染音视频的库libSDL构建的媒体文件播放器。 ffplay工具下载并播放视频&#xff0c;可以辅助卡看流信息。 官网下载地址&#xff1a;http://ffmpeg.org/download.html#build-windows 下载build好的exe程序&#xff1a; 此处下载…

wangEditor富文本编辑器,Laravel上传图片配置和使用

文章目录 前言步骤1. 构造好前端模版2. 搭建后端存储3. 调试 前言 由于最近写项目需要使用富文本编辑器&#xff0c;使用的是VUE3.0版本所以很多不兼容&#xff0c;实际测试以后推荐使用wangEditor 步骤 构造好前端模版搭建后端存储调试 1. 构造好前端模版 安装模版 模版安…

利用 SAM2 模型探测卫星图像中的农田边界

将 Segment Anything Model Version 2 应用于卫星图像以检测和导出农业地区田地边界的分步教程 &#x1f31f; 简介 手动绘制田地边界是最耗时的任务之一&#xff0c;其准确性取决于绘制者的表现。然而&#xff0c;精确的边界检测在很多领域都有应用。例如&#xff0c;假设您…

数据库管理-第287期 Oracle DB 23.7新特性一览(20250124)

数据库管理287期 20245-01-24 数据库管理-第287期 Oracle DB 23.7新特性一览&#xff08;20250124&#xff09;1 AI向量搜索&#xff1a;算术和聚合运算2 更改Compatible至23.6.0&#xff0c;以使用23.6或更高版本中的新AI向量搜索功能3 Cloud Developer包4 DBMS_DEVELOPER.GET…

第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)

1.并发编程的三个重要特性 并发编程有三个至关重要的特性&#xff0c;分别是原子性、有序性和可见性 1.1 原子性 所谓原子性是指在一次的操作或者多次操作中&#xff0c;要么所有的操作全部都得到了执行并 且不会受到任何因素的干扰而中断&#xff0c;要么所有的操作都不执行…

mysql-06.JDBC

目录 什么是JDBC: 为啥存在JDBC: JDBC工作原理&#xff1a; JDBC的优势&#xff1a; 下载mysql驱动包&#xff1a; 用java程序操作数据库 1.创建dataSource: 2.与服务端建立连接 3.构造sql语句 4.执行sql 5.关闭连接&#xff0c;释放资源 参考代码&#xff1a; 插…

unity 粒子系统设置触发

1、勾选Triggers选项 2、将作为触发器的物体拉入队列当中&#xff0c;物体上必须挂载collider 3、将想要触发的方式&#xff08;Inide、Outside、Enter和Exit&#xff09;选择为”Callback“&#xff0c;其他默认为”Ignore“ 4、Collider Query Mode 设置为All&#xff1a…

LMI Gocator GO_SDK VS2019引用配置

LMI SDK在VS2019中的引用是真的坑爹,总结一下经验,希望后来的人能少走弯路.大致内容如下: &#xff08;1&#xff09; 环境变量 &#xff08;2&#xff09;C/C 附加包含目录 E:\GWQ\Gocator\GO_SDK\Gocator\GoSdk E:\GWQ\Gocator\GO_SDK\Platform\kApi &#xff08;3&#…

61,【1】BUUCTF WEB BUU XSS COURSE 11

进入靶场 左边是吐槽&#xff0c;右边是登录&#xff0c;先登录试试 admin 123456 admiin# 123456 admin"# 123456 不玩了&#xff0c;先去回顾下xss 回顾完就很尴尬了&#xff0c;我居然用SQL的知识去做xss的题 重来 吐槽这里有一个输入框&#xff0c;容易出现存储型…