爬虫|Python|ts格式的加密视频合并方法

news2024/12/26 14:10:31

前言:

爬虫的一些基本概念:

对于爬虫来说,没有道德(比如,某些爬虫上w的并发,那么,一些小站可能就会崩溃,其实爬虫也是可以作为网络攻击的,假设有需要攻击的网站,上w甚至上百万的并发爬虫持续攻击,这个网站可能开不了),没有知识产权(爬虫行为本来就是无视知识产权的,例如,爬取特权类视频,音乐,文章),没有网站安全这些规则(通常,爬虫一旦开始,除非快速的自动封禁,例如,封IP,否则无法停止),也就是说,对于任何资源都可以借助爬虫来获取,爬虫只是一个么得感情的机器,但有些东西是不能看,不能摸的,例如,国家机密,个人隐私(那有的人说,我看看怎么了?确实没什么,但是只要让人发现了,那么牢门基本也就开了,所以有人说Python是面向牢狱编程,其实说的也就是Python里的爬虫技术)

因此,爬虫是一个需要比较全面的技术的,需要对于网站,网站结构,网站的规则,网站加解密,数据清理(爬取的数据可能会有冗余的东西在里面),正则表达式,js编程和加解密 等等非常熟悉才可以(技术全面才可以万物皆可爬,否则爬取的范围会比较狭窄)。

注:

爬虫的爬取对象简单分类

根据对象的种类来说,通常可以简单分为音视频类和文字信息类,例如,爬取某个网站的音视频,这个和爬取58的租房信息(文字信息类)是截然不同的。主要是音视频基本是不需要太多数据清理的,爬取的成果基本是可以直接使用的。而文字信息类需要做大量的清洗工作,比如,爬取某个招聘网站的招聘信息,可能还需要将爬取结果分析后图形化展示,而不是简单的仅仅把招聘信息爬取下来就完了。

OK,以上是对爬虫的一个简单介绍,可能会有些地方写的不对,不过这些不是关键,关键的是本文将结合实际案例来讲解如何爬取某个视频网站,并将爬取下来的ts格式的文件碎片合并成一个可用的视频。

一,

爬取流程介绍

1,观察网站结构

例如,网站的资源是flv,还是ts,还是mp4,还是mpeg?data?AVI?rm?

2,判断资源存放情况,是否有加密

基本上9成的音视频是使用js技术加密

3,Python爬取数据(资源)

这个没什么好说的,选择合适的工具爬取就行了

4,清洗数据(资源),数据本地化存放

例如,ts格式的音视频,需要利用VLC或者FFmpeg这些工具做格式转换或者合并,通常不做格式转换。

二,

本例是爬取电影,为了减少不必要的麻烦,本文将对相关网站信息做一个隐藏

OK,该网站是js加密的视频网站,至少说明了它的前端是js

下载下来的m3u8文件内容大体如下:

#注 m3u8是加密的索引文件,视频整个是由打散的ts文件组成,播放顺序什么的依赖于此文件内的定义。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:17
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="/GC9085SGN/hls/key.key?auth_key=1682852153-0-0-7bf5f4d47f0ec3df72272b30216650d9"
#EXTINF:16.683,
/GC9085SGN/hls/whsPIn26.ts?auth_key=1682852153-0-0-a32f5de97343f44bc587f6b7539287f4
#EXTINF:8.342,
/GC9085SGN/hls/TV01N4OD.ts?auth_key=1682852153-0-0-9c2c4060ad661d909823f7b9d87810d3
#EXTINF:7.574,
/GC9085SGN/hls/d1JsgnCS.ts?auth_key=1682852153-0-0-72ba99f4312b3829d38cb726aa7ce1da
#EXTINF:8.342,
/GC9085SGN/hls/RguFgwwn.ts?auth_key=1682852153-0-0-1abf376184fd0989494008b0a6c08b4d

#EXT-X-KEY:METHOD=AES-128,URI="/GC9085SGN/hls/key.key 这一段表示视频是采用aes-128加密算法加密的,并且带有key,key 的存放地址是网站首页+/GC9085SGN/hls/key.key

ts文件是没有办法直接看的,因为,有key加密,如果没有加密,那么也仅仅是一个小片段而已。

OK,目前的任务就是通过m3u8这个索引文件将该文件内定义的所有ts文件(也就是视频碎片文件)爬取下来,并将所有ts文件合并,合并后的文件就是解密出来的可以直接看的视频文件了。

 那么,保存有整个m3u8文件信息的就是以下链接了,也就是说获取ts文件是从这个链接开始:

三,

Python编程,根据m3u8文件,爬取ts文件:

GC5498WCU是js加密的sn,这个每一个视频都是不同的,因此,代码里要和URL里的一致,总共是三个地方涉及。auth_key 是ID号,

import requests
import re
import os
def ts_long():
    headers = {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Connection": "keep-alive",
        "sec-ch-ua": "\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "cross-site",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
    }
    url = 'https://xxxxx/GC5498WCU/hls/index.m3u8?auth_key=1683086690-3uw3vaj5c3kityoxiuapmegw8ywv7clg-0-259993e937aa27591a3907a3a92b07fd'
    resp = requests.get(url)
    data = resp.text
    print(data)
    print("1111111111")
    print(len(data),type(data))
    indexs_list = re.findall(r'/GC5498WCU/hls/(.*)', data)
    #indexs_key = re.findall(r'1682852153(.*?)',data)
    print(indexs_list,len(indexs_list))
    for i in range(0, len(indexs_list)):
        print(i)
        print(indexs_list[i])
        thisname = re.findall(r'.*.ts', indexs_list[i])
        print(thisname,type(thisname))
        name = ''.join(thisname)
        print(name,type(name))
        uri = 'https://xxxxxxx.cn/GC5498WCU/hls/{}'.format(indexs_list[i])
        print(uri)
        res = requests.get(uri, headers=headers)
        data1 = res.content
        f_path = '\123'
        with open(f_path + name, 'wb') as fp:
            fp.write(data1)
            print(name,'下载完成!!')
ts_long()

 

 代码运行的样子是这样的:

四,

FFmpeg合并ts文件

FFmpeg下载地址: 

Builds - CODEX FFMPEG @ gyan.dev

https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-2023-04-30-git-e7c690a046-full_build.7z




FFmpeg合并ts文件有两种方式,一种方式是网络,直接通过m3u8的网络地址下载合并,大体命令如下:

E:\新桌面\ffmpeg-2023-04-30-git-e7c690a046-full_build\ffmpeg-2023-04-30-git-e7c690a046-full_build\bin\ffmpeg.exe     -allowed_extensions ALL -protocol_whitelist "file,http,crypto,https,tcp,tls" -i https://xxxxx.cn/GC9093CRU/hls/index.m3u8?auth_key=1683208754-gp2c9xsv9nay1wgcjwtc6xc9ifnypeyg-0-5ffb80c2f15da85c32b0a643ffb0677d   E:\新桌面\xxxx\4444.mp4

 大概输出是这样的:

 第二种方式比较麻烦,但是速度十分的快,也就是本地的ts文件合并,由于ts文件是加密的,因此,需要key.key 文件,m3u8文件,并对m3u8文件做修改(ts文件路径修改为本地路径):

(文件修改比较麻烦,不过有宏录制还算比较简单的吧,如何批量修改见我的博文:vim的宏录制和应用实例(文本编辑飞一般的感觉)_录制宏的例子_晚风_END的博客-CSDN博客

C:\Users\adminsss\PycharmProjects\untitled\venv\  这个路径是我的Python跑的路径,前面下载的ts文件,不知道什么原因都加了一个S,因此,还是使用宏处理掉,key.key的路径也是本地的,ts文件也是修改为本地的,由于是本地合并,因此,合并出来的文件十分清晰,没有音视不同步的情况。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="C:\\Users\\adminsss\\Desktop\\key.key"
#EXTINF:5.067,
C:\Users\adminsss\PycharmProjects\untitled\venv\SvMNMI3F0.ts
#EXTINF:8.333,
C:\Users\adminsss\PycharmProjects\untitled\venv\S1CGCFR76.ts
#EXTINF:8.333,
C:\Users\adminsss\PycharmProjects\untitled\venv\SWOYtWIYD.ts
#EXTINF:8.333,
C:\Users\adminsss\PycharmProjects\untitled\venv\SnqD9lyW7.ts
#EXTINF:8.333,
。。。。略略略

然后打开cmd,输入以下命令即可:

 也就是

ffmpeg.exe -allowed_extensions ALL -protocol_whitelist "file,http,crypto,https,tcp,tls" -i index.m3u8 -c copy 12323.mp4

上面的例子里,我都是用的绝对路径,m3u8 文件存放在桌面了,-allowed_extensions ALL -protocol_whitelist "file,http,crypto,https,tcp,tls" 这些必须要有,否则会报错,成功合并的样子:

由于cmd是在system32目录下,因此,合并出来的文件也在这个目录下,当然,你可以指定输出的路径,我偷懒了而已。

OK,ts文件合并就暂时介绍到这里。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell 脚本传递参数的两种方式:位置传参与指令式传参

Shell 脚本传递参数的两种方式 方式一:数字传参 直接传参 数字传递可以用$1 $2 $3 ......获取第一个第二个第三个参数,$0获取命令(也就是你的文件名),$#可以查看总的参数个数 以下文件命名为param1(shel…

rk3568平台调试typec口实现uvc输出,网络共享等功能

一、修改kernel相关配置 注意:一定要知道主控接线,那个物理口是otg的,然后要找准与之所连接的phy和控制器。然后处理CC1 CC2识别芯片,fusb302。默认sdk自带有驱动,需要配上中断脚和提供VBUS 5V的脚。用来判断角色是DF…

( “ 图 “ 之 拓扑排序 ) 210. 课程表 II ——【Leetcode每日一题】

❓210. 课程表 II 难度:中等 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,想要学…

使用 docker 搭建 mysql 主从配置

真正的配置文件是docker中 /etc/my.cnf 拉取镜像 docker pull mysql:5.7启动主数据库和从数据库 docker run -p 3306:3306 --restartalways --name mysql_v1 -v /var/mysql/mysql_v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORDroot -d mysql:5.7 docker run -p 3307:3306 --res…

Neural Network笔记2

torch.nn: Containers: 神经网络骨架 Convolution Layers 卷积层 Pooling Layers 池化层 Normalization Layers 正则化层 Non-linear Activations (weighted sum, nonlinearity) 非线性激活 Convolution Layers Conv2d torch.nn.Conv2d(in_channels, out_channels, ke…

java版企业电子招投标系统源码 spring boot+mybatis+前后端分离

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…

一体化管理系统如何使企业受益?

在当今世界,大多数企业使用管理系统来制定政策和程序,以帮助实现其业务目标。管理体系是用于确保企业能够管理实现其目标所需的所有任务的流程和程序的结构。 公司或企业会有支持客户、采购、项目、考勤、财务等管理系统,这些管理系统通常在…

OBCP部分考点总结

备份恢复: 恢复的最小力度:租户级 分布式事务: 参与者或者协调者宕机,全部参与者发送prepare ok,客户端会commit sql引擎: 不能使用常量的场景:between and 应该可以使用常量,被…

菁染料CY3标记氨Cyanine3-amine合成方式2247688-56-6

CY3-amine是一种荧光染料,其分子式为C36H52Cl2N4O ,分子质量616.745,具有良好的荧光性能和化学稳定性。 产品名称:菁染料CY3标记氨基;三甲川花菁染料标记氨基 英文名称:Cy3-amine;Cyanine3-amine 品牌商&a…

论文ai生成-一键生成论文的软件

ChatGPT自动写论文 ChatGPT可以使用生成的文本来帮助撰写学术论文,其中包括文章的大纲、段落和句子。但是,它并不会像一个完全替代人的写作工具一样让你“自动”写作。 虽然ChatGPT可以生成相当准确的语言,但它并不完美,它并不能…

Websocket的基本认识、使用与封装

目录 一、Websocket是什么 二、Websocket的基本使用 使用介绍 第一步 第二步 第三步 第四步 常用API介绍 WebSocket(url[, protocols]) WebSocket.readyState WebSocket.send(data) WebSocket.close([code[, reason]]) WebSocket.bufferedAmount WebSocket.exten…

顺序表功能实现(入手版详解)

🍉博客主页:阿博历练记 📖文章专栏:数据结构与算法 🚚代码仓库:阿博编程日记 🌹欢迎关注:欢迎友友们点赞收藏关注哦 文章目录 🍓前言✨顺序表🔍1.顺序表的整体…

【SpringBoot】SpringBoot 优雅地校验参数

1、为什么要校验参数? 在日常的开发中,为了防止非法参数对业务造成影响,需要对接口的参数进行校验,以便正确性地入库。 例如:登录时,就需要判断用户名、密码等信息是否为空。虽然前端也有校验,…

剑指offer 栈习题训练经验总结(未完)

第一题 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中&#xff0c;调用 min、push 及 pop 的时间复杂度都是 O(1)。 class MinStack {private:stack<int> s;stack<int> min_s;public:void push(int x) {s.push(x);if…

xxl-job 集成 SpringBoot 使用

文章目录 前言xxl-job 集成 SpringBoot 使用1. xxl-job 安装部署超链接2. 启动xxl-job3. 集成 SpringBoot 使用3.1. 添加依赖3.2. 执行器 配置3.3. 执行器组件配置3.4. XxlJob 开发步骤 4. &#xff08;BEAN模式&#xff09;示例5. GLUE(Java) 示例6. 注意 前言 如果您觉得有用…

视觉震撼的数据可视化示例

众所周知&#xff0c;数据可以非常强大——当你真正理解它告诉你什么时。 数据和信息可视化(数据可视化或信息可视化)是对大量复杂的定量、定性数据、信息进行设计和创建易于沟通、易于理解的图形或视觉表示的实践&#xff0c;在静态、动态或交互式视觉项目的帮助下&#xff0…

Java对象的创建方式以及对象的引用

日子就是这么的庸常&#xff0c;却有细碎的事物&#xff0c;如太阳碎碎的光芒&#xff0c;洒落其上 Java创建对象有几种方式 new创建新对象 new创建我们就很熟悉了&#xff0c;像Person p new Person();等等 通过反射机制 这种创建对象的方式就是当我们编译时不知道要创…

java面试,redis面试,java面试大全

LEARNING_CONTENT 一个分布式锁的解决方案&#xff0c;另一个是分布式事务的解决方案 -2 flink 链接&#xff1a;flink参考文章 -1 linux of view 参考链接&#xff1a; linux常见面试题 linux查看占用cup最高的10个进程的命令&#xff1b; 参考文章&#xff1a;linux查看…

uboot 启动内核代码分析

0、uboot和内核区别 uboot的本质就是一个复杂点的裸机程序。内核本身也是一个"裸机程序“&#xff0c;和uboot、和其他裸机程序并没有本质区别。 区别就是操作系统运行起来后在软件上分为内核层和应用层&#xff0c;分层后两层的权限不同&#xff0c;在内存访问和设备操作…

iptables 防火墙进出控制

iptables 防火墙进出控制 iptables简介 iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则&#xff0c;iptables 默认维护着 4 个表和 5 个链&#xff0c;所有的防火墙策略规则都被分别写入这些表与链中。 “四表”是指 iptab…