雨一直下,气氛还算融洽……,我这边下了一周的雨了,趁着目前有个把小时的间歇时间,赶紧接着上一篇更一波,哎,时间就是这么不够用,来吧,抓紧时间今天来实现一下提取m3u8真实的播放地址,实现上篇页面展示的在线播放功能.

既然要获取地址,首先还是得跟踪下目标网站的页面代码,把流程搞懂了,代码就好写了,具体操作这里就不多说了,之前的内容讲过,这里我们就把分析的结果提出来:

我们可以看到他是通过JS渲染后加载了一个iframe框架,如果我们直接查看源代码的话是没有这个内容的,那怎么获取这个链接地址呢,我们看下源代码:

找了半天没找到播放地址,但找到了这段JS,我们打开看下:

解析一下好看点:

果然,这段JS就是放视频地址的文件,它这里输出是中文转义过了,playname是播放的云接口,比如高清云,云播3什么什么的,playurls里是集合,每个集合第1个参数是集数,第2个就是视频播放地址,第3个是它对应的播放网址,这里其实有想法的同学可以按自己的方式去提取,这里包含了这个电视剧所有的剧集数,我们再看看这个播放地址是不是正确的,我们打开源网站查看下视频链接:

我们看到这里有2个index.m3u8,打开第1个内容看看:

第2个再看看:

上面可以看出,第2个才是我们想要的真实的m3u8地址:

由此可以看出,这真实的m3u8地址是通过一次访问js中给出的https://shishang.dingxiangzuida.com/20200520/6979_4533ef88/index.m3u8,在获取内容后拼接后得到真实的地址,但这里有点区别,我们通过JS获取的网址:https://shishang.dingxiangzuida.com/20200520/6979_4533ef8uQ6h/index.m3u8,这里6979_4533ef8uQ6h多了后面一段文字,如果直接访问这个链接是找不到文件的,

它是内部通过https://www.juji.tv/Player/dp.html?v=转换后得到的真实地址:

通过上面的仔细分析,我们搞懂了它执行及获取真实地址的方法,那接下来我们就通过代码来实现提取从而获得真实的视频播放地址,下面贴上代码部分:

#获取m3u8地址
def get_video_m3u8(self,videourl,videoname):#赋值给全局变量值self.videourl = videourlself.videoname = videoname#截取网址域名部分domainurl=re.search('http[s]?://[-\w.]+', videourl).group()#请求视频播放网址r = requests.get(url=videourl, timeout=self.timeout)#提取包含视频m3u8地址的js网址jsurl = re.search(r'src=\"\/dian(.*?)">', r.text).group(1)jsurl="{}/dian{}".format(domainurl,jsurl)#请求获取JS网址的内容response = requests.get(url=jsurl,timeout=self.timeout)videostr=re.search(r'ff_urls=\'(.*?)\';',response.text).group(1)#格式化JSvideojson=json.loads(videostr,encoding="utf-8")print(videojson)#定义一下我们显示的云类型及播放地址集合videotype='swyun'playurls = []#首先我们判断我们选择的swyun云端是否存在for p in videojson["Data"]:if p["playname"]==videotype:playurls=p["playurls"]break#如果不存在,我们再尝试提取zdyun云端的内容,这里可以依次,因为这个视频网的云端比较多if len(playurls)==0:for p in videojson["Data"]:if p["playname"]=="zdyun":videotype='zdyun'playurls=p["playurls"]break#获取对应的播放地址for vp in playurls:if videoname.split("_")[1] == vp[0]:playurl = vp[1]break#通过下面地址转换,获取真正的播放地址,这里一定要加referer,否则请求不到内容zurl = "https://www.juji.tv/Player/dp.html?v="+playurlheaders = {'referer': videourl}response = requests.get(url=zurl, headers=headers, timeout=self.timeout)#用正则获取到真正的播放地址realurl=re.search(r'purl\s=\s\'(.*?)\';',response.text).group(1)#这里我们为了方便,发现有出现2次index.m3u8这样的,里面的内容都是/1000k/hls/*.m3u8,所以直接判断加上if videotype == 'zdyun' or videotype == 'okyun':playurl = realurl[:realurl.rfind("/")] + "/1000k/hls/" + realurl.split("/")[-1]else:playurl=realurlprint("真正的地址:",playurl)return playurl

下面我们运行打印看看:

我们在主文件里创建一个post方法,成功后返回该地址:

#在线播放
@app.route("/play",methods=["post"])
def play():args = request.args if request.method == 'GET' else request.formname = args.get('name', "", type=str)url = args.get('url', "", type=str)#载入Video类调用获取地址的方法v = Video()url = v.get_video_m3u8(url,name)#成功后返回地址信息msg={"code":200,"url":url}return jsonify(msg)

html部分通过jquery的ajax请求的,在线播放是引用了videojs,html中的JS我们全部引用的是别人CDN的镜像文件,你也可以下载到本地放到static文件夹中的JS文件夹中,我会提供源码作为参考,这里不做过多的说明,接下来我们就可以输出给页面实现进行点击播放:

好了,由于时间关系,今天就讲到这里,这篇实现了获取真实视频地址并实现在线播放,下篇会讲实现m3u8的下载并使用ffmpeg将多个ts文件合并成为web支持的MP4视频文件,敬请期待!

需要源码的童鞋请关注公众号回复:韩剧播放

江湖不说再见,咱们下篇见!

关注公众号,超越平凡才能成就自己

江湖小白之一起学Python (十二)开发视频网之获取m3u8真实播放地址相关推荐

  1. 江湖小白之一起学Python (五)爬取淘宝商品信息

    趁热需打铁,随着这几天的鸡血澎湃,我们来实现一下爬取淘宝商品信息,我记得几年前曾用python写了下抓取淘宝天猫,京东,拍拍的爬虫,专门采集商品信息,图片,评论及评论图片,我还用pyqt开发了个客户端 ...

  2. 零编程基础学python-如果是一个纯0编程基础的小白,如何学Python

    Python 可用的地方非常多.无论是从入门级选手(爬虫.前端.后端.自动化运维)到专业级数据挖掘.科学计算.图像处理.人工智能,Python 都可以胜任.或许是因为这种万能属性,周围好更多的小伙伴都 ...

  3. 给想学python-零基础的小白,如何学Python才能更快就业?

    前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 本篇文章主要讲,如果是一个纯0 ...

  4. 为何python不好找工作-听说自学Python不好找工作,小白要如何学Python?

    Python作为如今非常火热的编程语言,无论是使用程度还是受关注程度都在不断增加,吸引了不少人前去学习.想要学习Python无非有两种方法--自学和参加培训班,但很多自学Python的人会面临着不好就 ...

  5. 0基础小白学python好学吗-如果是一个纯0编程基础的小白,如何学Python

    Python 可用的地方非常多.无论是从入门级选手(爬虫.前端.后端.自动化运维)到专业级数据挖掘.科学计算.图像处理.人工智能,Python 都可以胜任.或许是因为这种万能属性,周围好更多的小伙伴都 ...

  6. 看例子,学 Python(二)

    看例子,学 Python(二) 看例子,学 Python(一) 看例子,学 Python(三) 模块 文件 mymath.py 定义了函数 fib 和 fac,mymath.py 就是一个模块. A ...

  7. 从头开始学Tableau-第十二章(实战3 地图实践)

    从头开始学Tableau-第十二章(实战3 地图实践) 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十章 数据源 这个实践主要是用地图来呈现数据,我们所用的是保险 ...

  8. python零基础入门教程视频下载-零基础学Python入门教程,视频资源下载

    课程名称 零基础学Python入门教程,视频资源下载 课程目录 第一章 :Python介绍和安装 01.Python语言的特点 02.Python的发展历史与版本 03.Python的安装 第二章 : ...

  9. 《跟小海龟学Python》部分案例视频集锦

    对于Python的入门学习,就不得不提turtle(海龟)绘图库,通过代码控制一只小海龟在屏幕上爬行,从而绘制出各种精美的形状和图案.这种简单便捷的图形化方法.立即反馈式的绘画效果,成为众多编程入门者 ...

最新文章

  1. 机器学习竞赛实际上是一场数据竞赛
  2. Android NDK 简单介绍、工具安装、环境配置
  3. Spring Boot+Docker微服务分布式服务架构设计和部署案例
  4. 再谈移动端Web屏幕适配
  5. PostSharp的AOP设计在.NET Remoting中的应用
  6. sprint计划会议总结
  7. NIO详解(九):Channel详解
  8. 数据结构34:二叉树前序遍历、中序遍历和后序遍历
  9. 10.1.4 HTML练习题
  10. Oracle的SQL基础之用户与表空间
  11. Topological Spaces(拓扑空间)
  12. android audio arch
  13. 苹果Mac全新的文件启动方式:Hapigo
  14. Oracle数据库岗位,Oracle数据库岗位职责
  15. MindAR初体验——一款js实现的AR库
  16. 如何设计账户余额的数据准确性?
  17. UEditor1.4.3.3的webshell漏洞攻击揭秘
  18. 两台计算机通信 系统态和用户态,os2014-期末试卷A答案.pdf
  19. 神器-可视化分析之Basemap实战详解(二)
  20. win7删除桌面计算机图标怎么删除,桌面无法删除的图标,详细教您win7桌面图标删不掉怎么办...

热门文章

  1. 求职面试自我介绍一分钟
  2. 自定义view之网状图
  3. memtester内存压力测试
  4. Linux中rz -y命令和rz -E命令的区别
  5. MFC Windows 程序设计[319]之渐变标题栏程序(附源码)
  6. html的显示消息和留言板
  7. 单片机实验笔记(汇编、Proteus仿真)
  8. Neutron运营商网络和租户网络详解
  9. 天翼云应用实操-天翼云资源池间通过IPSEC实现高速互通
  10. Linux多进程(二)