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

Python爬虫:通过js逆向获取某瓜视频的下载链接

爬虫:通过js逆向获取某瓜视频的下载链接

    • 1. 前言
    • 2. 获取script标签下的视频加密数据
    • 3. 第一步:获取解密后的视频下载链接
    • 4. 第二步:模拟生成加密的webid值

1. 前言

就小编了解,某瓜视频这个网站对应视频下载链接加密处理至少经过三个版本。之前在CSDN发布了一篇关于它的视频下载链接获取方式,但是目前已经失效了,于是现在小编重新发布一篇。注意:内容仅供学习使用,切莫用于商业活动。另外,文章中只涉及到相关获取下载链接的过程,不提供相关代码哈!

2. 获取script标签下的视频加密数据

随便打开一个视频链接,然后在开发者工具下查找script标签,如下:
在这里插入图片描述
直接搜索

//script[@id='SSR_HYDRATED_DATA']/text()

可以发现这里定义了一个js变量,类型为对象。而对应的视频下载链接加密数据就在这个对象数据里边。可以使用requests模块访问这个网页,然后使用xpath(其他方式比如bs4,re正则表达式)方式获取到这个对象数据,之后经过一些处理把这个js对象数据转化为python的字典数据,然后就可以找到对应的视频下载链接的加密数据了,如下:

在这里插入图片描述
这个main_url和backup_url_1键对应的值都是视频下载链接的加密数据,通过一定解密处理,最终可以得到的下载链接如下:
在这里插入图片描述

这时的这个下载链接不就是我们需要的吗?虽然还缺少几个参数。

在这里插入图片描述

在这里插入图片描述
此时还缺少参数_vid、webid、fid、wid,需要说明的是,_vid就是当前播放的视频id,可以从上述那个对象数据找到(不过好像也不是一定需要的),而fid、wid值是固定的,当然可能随着平台的不同,会有所差异。而webid的值是有两个值组成,用“-”隔开,“-”前面的值是固定的,当然可能随着平台的不同,会有所差异;而“-”后面的值是一个加密数据,需要用到上述经过解密处理的下载链接中的expires值(是一个长度为10的时间戳字符串),通过一定加密处理和参数拼接,即可获取到对应视频下载链接,如下:
请添加图片描述
下面用两步来说明一下获取对应视频下载链接的过程。

3. 第一步:获取解密后的视频下载链接

首先,在源代码/来源这里,打开控制台抽屉栏,然后在搜索输入框中输入 Hr=,找到这个Hr函数,然后在其下面这里打下断点。
在这里插入图片描述
之后刷新当前页面,然后对当前断点进行按步调式,可以发现,此时执行的代码块是这个。
在这里插入图片描述
可以看一下此时的arguments的值,如下:

在这里插入图片描述
可以发现,此时的backup_url_1和main_url的值都是看不懂字符串,但是把这个函数执行一遍,你就会发现,此时的back_url_1和main_url的值是一段链接字符串了,如下:
请添加图片描述
而这个n就是对应外部这个函数,如下:
请添加图片描述
通过多次执行后发现,这个e函数中其实也并没有执行解密操作,而是通过调用其他函数才实现的。
在这里插入图片描述
在上述这里打下断点,多次执行断点,最终可以获取到视频下载链接,由于涉及到比较多内容,小编不在此处详细说明了,读者可以自行尝试。
请添加图片描述
最后一步是执行base64decode函数。

4. 第二步:模拟生成加密的webid值

这里需要找到这个js包下这处,此处打下断点。
在这里插入图片描述
另外此处,也打下断点(因为webid加密处理在这里)
在这里插入图片描述
看看它的执行结果。
请添加图片描述
因为上述过程比较多,小编就不一一讲述了,读者有兴趣,可以自行尝试,需要注意的是其中一些数据来源开头讲到的那个对象数据喔!另外有一些数据是固定的。运行结果如下:
请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机岗位(面试)
  • Leetcode Day21组合总和
  • 设计模式之-开闭原则
  • ecmascript和javascript的区别详细讲解
  • 云原生架构概念
  • 发那科A06B-6270-H045#H600 主轴伺服放大器
  • 1. GIS开发工程师岗位职责、技术要求和常见面试题
  • 数据访问:JPA关联MyBatis
  • 【ShuQiHere】深入理解递归:从基础概念到实际应用
  • mysql如何使用explain来分析语句使用到的索引效果
  • JAVA毕业设计167—基于Java+Springboot+vue3+小程序的物业管理系统小程序(源代码+数据库+万字论文+文献综述)
  • 基于BiLSTM-CRF的医学命名实体识别研究(下)模型构建
  • 【计算机网络】socket编程 --- 实现简易TCP网络程序
  • 【conda】入门与进阶:在Windows和Linux中管理环境和包
  • NXPFS6500
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • download使用浅析
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • HTTP中GET与POST的区别 99%的错误认识
  • java多线程
  • SegmentFault 2015 Top Rank
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • vue-router 实现分析
  • 讲清楚之javascript作用域
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 浅谈Golang中select的用法
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​一些不规范的GTID使用场景
  • #宝哥教你#查看jquery绑定的事件函数
  • #知识分享#笔记#学习方法
  • $refs 、$nextTic、动态组件、name的使用
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (void) (_x == _y)的作用
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Unity3DUnity3D在android下调试
  • 、写入Shellcode到注册表上线
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET gRPC 和RESTful简单对比
  • .net6Api后台+uniapp导出Excel
  • .NET中GET与SET的用法
  • .NET中分布式服务
  • [ Socket学习 ] 第一章:网络基础知识
  • [ 第一章] JavaScript 简史
  • [ 转载 ] SharePoint 资料
  • [2021 蓝帽杯] One Pointer PHP
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [AIGC] 使用Curl进行网络请求的常见用法