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

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


http://www.kler.cn/a/294780.html

相关文章:

  • ubuntu20.04安装anaconda与基本使用
  • Qt 编写插件plugin,支持接口定义信号
  • 相亲小程序(源码+文档+部署+讲解)
  • UI资源分包 -- 基于Xasset框架代码实例
  • vscode Markdown
  • Mac中禁用系统更新
  • OpenGL(二)-更详细版的三角形
  • Java项目——苍穹外卖(一)
  • TypeScript系列 :接口interfaces
  • BERN2(生物医学领域)命名实体识别与命名规范化工具
  • 机器学习(西瓜书)第 4 章 决策树
  • API安全 | 发现API的5个小tips
  • AtCoder Beginner Contest 370 Solution
  • vue如何实现路由缓存
  • 解决面板安装Node.js和npm后无法使用的问题
  • 浙大数据结构:堆栈和队列的定义与操作
  • 2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)
  • 大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
  • 网页开发 HTML
  • [代码已更新]2024数学建模国赛高教社杯C题:农作物的种植策略 思路代码文章助攻手把手保姆级
  • uniapp网站和微信小程序 添加 百度统计
  • 一起学习LeetCode热题100道(71/100)
  • 大数据时代的技术hive:hive的数据类型和数据模型
  • How can I provide a RGBA png file to OpenAI PHP library
  • 前缀和 — 利用前缀信息解决子数组问题
  • 【Azure Redis】Redis-CLI连接Redis 6380端口始终遇见 I/O Error