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

自己开发软件实现网站抓取m3u8链接

几天前一个同学说想下载一个网站的视频找不到连接,问我有没有什么办法,网站抓取m3u8链接 网页抓取m3u8链接。当时一听觉得应该简单,于是说我抽空看看。然后就分析目标网页,试图从网页源码里找出连接,有的源代码直接有,但是有的没有, F12调出开发者工具,进NetWrok看到网页是通过ajax发起xhr请求拿的视频连接,怪不得页面元素里没有下载地址,请求的是m3u8格式文件,查了一下这是一种分片的流媒体文件,然后到处找下载这种格式文件的工具,都不是很理想。很多都是直接下了分片后的ts文件,但是这个网站的是加了密的,不能直接播放,最后找到ffmpeg这个视频插件神器,视频转码、剪切、合并、播放都不在话下,还支持多平台。 ffmpeg FFmpeg介绍和入门 ffmpeg开 FFmpeg官方网站 有了神器何不自己写个工具来下载呢,准备动手时首先就被连接怎么获取这个问题给拦住了, 数据不在网页元素里, 拦截网页所有请求肯定就拿到了。筛选后得到三种方案: 首先试了WebBrowser,目标网站直接打不开网页,让换谷歌浏览器,修改了UserAgent可以打开,但是网页显示不全,放弃 。最后用C#Sharp测试达到了预期目标, 然后就是写代码了: 视频地址获取只要继承集成默认的抽象类 DefaultRequestHandler就可以了.

public class MyRequestHandler : DefaultRequestHandler{public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback){//拿到url后再判断下是不是视频文件string url = request.Url;}
}

然后在初始化浏览器时指定下就行了。

chromeBrowser.RequestHandler = new MyRequestHandler(callback);

这里我是把url中的文件名提取出来,然后判断扩展名来判断是不是视频文件,不知道有没有更通用的方法。判断ResourceType == ResourceType.Media是不行的,很多时候这个值返回的是xhr。

FFmpeg部分就是直接命令行调用下,有时间再研究下这个神器的lib方式。

以下是折腾了几天出来的结果。

img

浏览器界面,解析m3u8链接后 可以看到需要下载的视频文件数量。 点击 开始下载按钮,来到如下界面。 可以在这里进行下载,播放等操作,界面美观,功能齐全 不管是网页解析m3u8链接, 还是网页批量下载等 如果需要下载一整部电视剧或者动漫,可以直接解放双手。 下载支持分片选择下载删除特定项目。 实时显示下载进度, 更新下载的数据大小。 一般情况下ts文件不用去下载,直接下m3u8就可以了,程序会自动分析ts分片文件全部下载完后自动合成一个mp4文件。

星尘库m3u8下载器下载地址:星尘库M3U8下载器​编辑https://sky.lanzouv.com/b0kn8uhti

软件下载:链接:星尘库M3U8下载器 提取码:6666 如果运行不了,请下载并安装NET Framework 4.6.1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Transformer自然语言处理实战pdf阅读
  • Jvm是如何处理异常的
  • 【ESP32接入国产大模型之豆包】
  • 2024年自动驾驶SLAM面试题及答案(更新中)
  • docker文件挂载和宿主主机文件的关系
  • 【IoTDB 线上小课 05】时序数据文件 TsFile 三问“解密”!
  • 2024在线PHP加密网站源码
  • 代码随想录算法训练营第二十天|二叉树 part7
  • 香薰学习笔记
  • 云计算的三种服务模式
  • c#,NumSharp 中的 NDArray属性说明
  • BUUCTF逆向wp [MRCTF2020]Xor
  • Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)
  • 代码随想录算法训练营第47天
  • wkhtmltopdf 工具安装与使用
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [case10]使用RSQL实现端到端的动态查询
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【刷算法】从上往下打印二叉树
  • JavaScript-Array类型
  • JS题目及答案整理
  • LintCode 31. partitionArray 数组划分
  • Linux CTF 逆向入门
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vue实战(四)登录/注册页的实现
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 大主子表关联的性能优化方法
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 与 ConTeXt MkIV 官方文档的接驳
  • 源码安装memcached和php memcache扩展
  • ​​​​​​​​​​​​​​Γ函数
  • # wps必须要登录激活才能使用吗?
  • #单片机(TB6600驱动42步进电机)
  • (1)虚拟机的安装与使用,linux系统安装
  • (3)STL算法之搜索
  • (C#)一个最简单的链表类
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (ZT)薛涌:谈贫说富
  • (二)丶RabbitMQ的六大核心
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三)Honghu Cloud云架构一定时调度平台
  • (十一)c52学习之旅-动态数码管
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Framework 3.5安装教程
  • .net 反编译_.net反编译的相关问题
  • .NET 反射的使用
  • .net 微服务 服务保护 自动重试 Polly
  • .net 中viewstate的原理和使用