python爬虫----爬取视频实战
python爬虫-爬取视频
-
本次爬取,还是运用的是requests方法
-
首先进入此网站中,选取你想要爬取的视频,进入视频页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要的一些信息。
-
爬取视频的步骤大致分为
- 1、UA伪装
- 2、获取url
- 3、发送请求
- 4、获取响应的数据
- 5、数据解析
- 获取存放视频和音频数据的"window.playinfo"文本内容
- 分别获取视频和音频的url
- 将获取到的视频和音频数据存放在两个不同的文件中
-
UA伪装
-
找到Cookie并复制—>用户登陆此网站的个人Cookie信息,每个人的都不同
-
找到Referer并复制—>每个网站的防盗链
-
找到User-Agent并复制—>标头的最下面
-
# UA伪装head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0","Referer":"https://search.bilibili.com/all?","Cookie":"buvid_fp_plain=undefined; DedeUserID=121991448; DedeUserID__ckMd5=9e0883af22947c47; CURRENT_BLACKGAP=0; buvid4=B52817A7-548A-24AF-F6D1-671539F8D84A46089-022112911-pIOydL%2Bx%2FtJ0KaVCrqVHDnapk68hRLXn0o6mnH1vuNcEyHPeCVTwrg%3D%3D; is-2022-channel=1; enable_web_push=DISABLE; header_theme_version=CLOSE; rpdid=|(m))m~uRmm0J'u~|RJlulkm; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW2; PVID=1; fingerprint=d26d60ed0ec0d0f7a6b5056693a8acbb; buvid_fp=d26d60ed0ec0d0f7a6b5056693a8acbb; CURRENT_QUALITY=80; buvid3=7F1C4251-972B-A6E5-38AD-63626520698301889infoc; b_nut=1733312401; _uuid=CC9A4FE3-ECB2-A4DD-710310-83446BD14310A02817infoc; home_feed_column=5; browser_resolution=1707-946; bp_t_offset_121991448=1012262974930288640; b_lsid=C3B8510D4_193F8977A84; bmg_af_switch=1; bmg_src_def_domain=i1.hdslb.com; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzUzMDE2OTgsImlhdCI6MTczNTA0MjQzOCwicGx0IjotMX0.9UDClgiB9GUJu1e6ZsyN6e-qeKtxbDOL1V8OdLFuIJo; bili_ticket_expires=1735301638; SESSDATA=43e92030%2C1750594499%2C7d892%2Ac1CjDdpJOFi23g70Eic2Tw3nEMZnLYzkVoT_5Nm4swH5FTg8uq5rFABX3tQAXj3SfJX0USVkFXWGRFSlhwS0hHWHdoc0tzLVBhVEZJWWI4OWdxeVZJLTBUdldEY2lZS1dOUmFJSTJwYklaM0ktVjJYb0lJZW9vdTcyWUlLOXJBM0h0VERtWWF1RzhBIIEC; bili_jct=d581670c772ec7051f16a05ec30fcb8b; sid=79g6fnjf; CURRENT_FNVAL=4048"}
-
获取url
- 可以在标头中看到请求URL
url ="https://www.bilibili.com/video/BV1N84y1P7en/?spm_id_from=333.337.search-card.all.click&vd_source=15b581d46c0893c3904b6158b122aca5"
- 可以在标头中看到请求URL
-
发送请求
- 可以在标头中看到请求方式,这里的请求方式是GET方法
# 发送请求,这里的请求方式是get方法 response = requests.get(url, headers = head)
- 可以在标头中看到请求方式,这里的请求方式是GET方法
-
获取响应的数据
- 这里使用requests中的response.text方法
# 获取响应的数据 res_text = response.text
-
数据解析
- 使用 lxml 库中的 etree 方法
- 并将获取到的数据写入到一个html的文件中,进入这个文件可以通过浏览器打开,查看是否是我们将要获取视频的页面
tree = etree.HTML(res_text)with open("bili2.html", "w", encoding="utf-8") as f:f.write(res_text)
-
获取存放视频和音频数据的"window.–playinfo–"文本内容
- 因为视频和音频的数据都存在window.–playinfo–中,因此我们需要在元素栏下通过标签定位到它,但是我们只需要其内容
- 因为window.–playinfo–的内容是一个大json字符串,所以我们可以通过json.loads的方法将它变成一个字典,方便后面通过键来取视频和音频的数据
base_info = "".join(tree.xpath("/html/head/script[4]/text()"))[20:] info_dict = json.loads(base_info)
-
分别获取视频和音频的url
- 在元素栏中可以看出window.–playinfo–的内容太多了,不利于我们寻找视频和音频的数据,我们可以在网络栏下,名称中第一个数据的响应中也可以找到,耐心一点向下慢慢通过标签找到window.–playinfo–,再在其中找到视频和音频的baseUrl
- 注意也可以使用Ctrl+f进行输入查找速度更快,更利于我们排除并查找
- 获取后,再次通过get请求方式,发送请求
- 注意:图片,视频和音频都是二进制内容,所以用content属性获取
video_url = info_dict["data"]["dash"]['video'][0]["baseUrl"] audio_url = info_dict["data"]["dash"]['audio'][0]["baseUrl"]video_content = requests.get(video_url, headers=head).content audio_content = requests.get(audio_url, headers=head).content
-
最后将获取到的视频和音频的数据分别存放在两个不同的文件中,视频可以是MP4或者是wmv格式,音频是MP4格式
with open("video2.wmv", "wb") as f:f.write(video_content)
with open("audio2.mp4", "wb") as fp:fp.write(audio_content)
完整代码
import requests
from lxml import etree
import jsonif __name__ == '__main__':# UA伪装head= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0","Referer": "https://search.bilibili.com/all?","Cookie": "buvid_fp_plain=undefined; DedeUserID=121991448; DedeUserID__ckMd5=9e0883af22947c47; CURRENT_BLACKGAP=0; buvid4=B52817A7-548A-24AF-F6D1-671539F8D84A46089-022112911-pIOydL%2Bx%2FtJ0KaVCrqVHDnapk68hRLXn0o6mnH1vuNcEyHPeCVTwrg%3D%3D; is-2022-channel=1; enable_web_push=DISABLE; header_theme_version=CLOSE; rpdid=|(m))m~uRmm0J'u~|RJlulkm; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW2; PVID=1; fingerprint=d26d60ed0ec0d0f7a6b5056693a8acbb; buvid_fp=d26d60ed0ec0d0f7a6b5056693a8acbb; CURRENT_QUALITY=80; buvid3=7F1C4251-972B-A6E5-38AD-63626520698301889infoc; b_nut=1733312401; _uuid=CC9A4FE3-ECB2-A4DD-710310-83446BD14310A02817infoc; home_feed_column=5; browser_resolution=1707-946; bp_t_offset_121991448=1012262974930288640; b_lsid=C3B8510D4_193F8977A84; bmg_af_switch=1; bmg_src_def_domain=i1.hdslb.com; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzUzMDE2OTgsImlhdCI6MTczNTA0MjQzOCwicGx0IjotMX0.9UDClgiB9GUJu1e6ZsyN6e-qeKtxbDOL1V8OdLFuIJo; bili_ticket_expires=1735301638; SESSDATA=43e92030%2C1750594499%2C7d892%2Ac1CjDdpJOFi23g70Eic2Tw3nEMZnLYzkVoT_5Nm4swH5FTg8uq5rFABX3tQAXj3SfJX0USVkFXWGRFSlhwS0hHWHdoc0tzLVBhVEZJWWI4OWdxeVZJLTBUdldEY2lZS1dOUmFJSTJwYklaM0ktVjJYb0lJZW9vdTcyWUlLOXJBM0h0VERtWWF1RzhBIIEC; bili_jct=d581670c772ec7051f16a05ec30fcb8b; sid=79g6fnjf; CURRENT_FNVAL=4048"}# 1、指定urlurl ="https://www.bilibili.com/video/BV1N84y1P7en/?spm_id_from=333.337.search-card.all.click&vd_source=15b581d46c0893c3904b6158b122aca5"# 2、发送请求response = requests.get(url, headers = head)# 3、获取响应的数据res_text = response.text# 4、数据解析tree = etree.HTML(res_text)with open("bili2.html", "w", encoding="utf-8") as f:f.write(res_text)base_info = "".join(tree.xpath("/html/head/script[4]/text()"))[20:]info_dict = json.loads(base_info)video_url = info_dict["data"]["dash"]['video'][0]["baseUrl"]audio_url = info_dict["data"]["dash"]['audio'][0]["baseUrl"]video_content = requests.get(video_url, headers=head).contentaudio_content = requests.get(audio_url, headers=head).contentwith open("video2.wmv", "wb") as f:f.write(video_content)with open("audio2.mp4", "wb") as fp:fp.write(audio_content)
注意:video2.wmv和audio2.mp4视频和音频文件是分开的,故此需要借助其他一些剪辑工具进行合并比如剪映,再次就不展示了,可以自行尝试
需要进入到文件夹进行打开视频和音频
仅教学爬取使用,请合法爬取。
相关文章:

python爬虫----爬取视频实战
python爬虫-爬取视频 本次爬取,还是运用的是requests方法 首先进入此网站中,选取你想要爬取的视频,进入视频页面,按F12,将网络中的名称栏向上拉找到第一个并点击,可以在标头中,找到后续我们想要…...

HarmonyOS NEXT 实战之元服务:静态案例效果--航空出行
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …...

DP83848以太网移植流程,可以TCP通信
DP83848-EP 是一款高度可靠、功能丰富的强大器件,包含了增强型 ESD 保护、MII 和 RMII,从而在 MPU 选择方面实现最大的灵活性,所有这些特性都融入于 48 引脚 PQFP 封装中。 DP83848-EP 配备 集成子层以支持 10BASE-T 和 100BASE-TX 以太网协议,这些协议确保了与基于其他标…...
css 裁剪 clip-path
clip-path 是一个强大的 CSS 属性,用于裁剪元素的可视区域,支持多种形状裁剪。它可以用来创建复杂的裁剪效果,如圆形、多边形、路径等。 clip-path: none | shape | url(#clipPathId);none:不裁剪,显示完整内容。shap…...

MySQL用表组织数据
用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…...

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV
目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH (1)w25flash.h (2) w25flash.c 1)W25Q16基本操作指令 2)计算地址的辅助功能函数 3)器…...

C++-------指针
把地址当做数值 在 C 中,指针本质上就是存储内存地址的变量。每个变量在内存中都有一个唯一的地址,通过取地址运算符 & 可以获取变量的地址,这个地址本质上是一个整数(在 32 位系统中是 32 位整数,64 位系统中是 …...
Linux文件目录 --- 移动和改名命令MV、强制移动、试探性移动过、按时间移动
二、MV移动改名命令 重命名文件:mv [选项] 旧文件名 新文件名 移动文件/文件夹:mv [选项] 源文件 目标目录 选项作用-b当覆盖文件时会对被覆盖文件进行先行备份。-i交互式操作,当目标文件已经存在时,会询问是否覆盖。-n试探性覆盖…...

03.HTTPS的实现原理-HTTPS的工作流程
03.HTTPS的实现原理-HTTPS的工作流程 简介1. HTTPS的工作流程1.1. TCP的工作流程1.1.1. 三次握手的详细步骤1.1.2. 三次握手的作用 1.2. HTTPS的工作流程1.2.1. HTTPS与TCP的关系1.2.2. HTTPS的工作流程 2. 公钥和私钥的作用3. 对称密钥的生成和交换4. 对称加密和非对称加密的区…...
vue实现批量下载文件流并压缩
为了实现文件流压缩,我们可以使用 JSZip 和 FileSaver 这两个第三方库。JSZip 是一个用于创建、读取和编辑 .zip 文件的 JavaScript 库,而 FileSaver 则用于在客户端保存文件。 JSZip:用于创建和操作zip文件。可以通过 file 方法将文件添…...

前端入门之VUE--ajax、vuex、router,最后的前端总结
前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。本人不是学前端的,这个是大一的时候上学的和做的笔记,那个时候学的也蒙,故这里对前端做一个总…...
安装k8s涉及命令(方便放到txt离线使用)
查看操作系统信息 uname -a # 查看所有操作系统信息 uname -s # 查看内核名称 uname -r # 查看内核版本号 uname -m # 查看机器硬件名称 cat /etc/os-release # 查看所有操作系统信息 配置hosts cat >> /etc/hosts << EOF 172.171.16.147 crawler-k8s-mast…...
FLV视频封装格式详解
目录(?)[-] OverviewFile Structure The FLV headerThe FLV File BodyFLV Tag Definition FLVTAGAudio TagsVideo TagsSCRIPTDATA onMetaDatakeyframes Overview Flash Video(简称FLV),是一种流行的网络格式。目前国内外大部分视频分享网站都是采用的这种格式. File Structure…...

搭建vue3+vant项目架构
git代码仓库,直接下载压缩包使用 1、首先要安装node.js(18.3 或更高版本) 2、创建vue3项目 npm create vuelatest然后按照自己的需要进行选择就行 到此vue3项目创建完成,接下来是搭建项目架构 3、配置Vant (移动端ui) vue3项目引入vant,…...

【Linux】进程间通信 -> 匿名管道命名管道
进程间通信的目的 数据传输:一个进程许需要将它的数据发送给另外一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件(如进程终止时要通知父进程…...
大数据开发学习路线
编程语言: Python:数据分析、数据预处理 Java:Hadoop和许多大数据工具的基础 Scala:用于Apache Spark数据库知识: SQL和NoSQL数据库的基本概念 数据库系统如MySQL、MongoDB等操作系统: Linux基础命令和脚本…...

华为云计算HCIE笔记05
第七章:其它模式 灾备组网 高可用性组网,单核心场景下,直接在两个站点中设置一个第三方仲裁站点,两个站点同时连接到仲裁,并且连接到对方。一旦出现问题,则由仲裁站点进行判断,进行业务切换 双核…...
wordpress网站用token登入开发过程
生成跳转token 示例: function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...
Python基础知识回顾
数据类型 Python可以区分整数(integers、下文简写为int)、浮点数(float)、字符串(string)和布尔值(Boolean)等数据类型。 1)int是可正可负的整数 2)float包…...

C++--------效率和表示
C 效率和表示 效率 时间效率:在 C 中,不同的数据结构和算法有着各异的时间复杂度。例如,访问数组元素的时间复杂度是 O ( 1 ) O(1) O(1),而遍历链表查找元素的时间复杂度最坏情况下是 O ( n ) O(n) O(n)。选择合适的算法与数据…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...