python爬取m3u8格式视频

  • m3u8原理
    • 脚本环境
    • 爬取步骤
    • 步骤的具体实现
    • python细节处理说明
    • 参考代码

m3u8原理

当我们在网页播放视频时,网页向服务器发起一个以.m3u8结尾的连接请求,服务器会将具体的.ts文件链接路径发送给网页,网页接收这写链接路径,并向这些链接发送请求,请求到的资源就是.ts视频文件,他和我们常见的mp4文件只是封装格式的不同,而且.ts文件的大小很小,我爬取的.ts文件只有六秒的视频文件。之后网页将这些.ts文件整合在一起并进行播放。

脚本环境

python3.8、win 10

爬取步骤

python要做的事情
1、选择可以爬取的视频网站
2、获取.m3u8的URL路径
3、通过requests.get获取.ts文件路径
4、保存.ts文件
5、合并.ts文件为mp4格式

步骤的具体实现

1、视频网站:https://www.3s8m.com/
2、随便选择一个视频进入播放页面,按下F12或者Fn+F12,打开审查元素,选择网络,刷新页面,暂停视频,在审查元素的网络页面选择XHR(没有可以直接在全部搜索m3u8),找到以m3u8结尾的数据包,点击获取URL
3、python 编写代码请求该URL,打印返回的数据;代码如下

import requests
url = “用第二部找到的URL填入”
results = requests.get(url) #发送get请求
results.encoding=“utf8” #设置编码格式,从网页源码中的head中可以看编码格式,这步不关键
print(results.text) #打印结果
results.close() #关闭

4、可以发现第3步中打印结果有很多URL地址,这些地址就是ts文件的地址,python下载ts文件

import request
url =“填入获取到的ts文件的URL”
results = requests.get(url)
results.encoding =“utf8”
with open("./a.ts",“wb”) as file:
file.write(results.content)
results.close()

5、合并全部的ts文件,调用python的os库,使用系统命令(copy /b a.ts+b.ts a.mp4)进行合并

import os
os.system(“copy /b a.ts+b.ts a.mp4”)

python细节处理说明

1、上述是通过手动查找获取的m3u8地址,那么为什么不用python去爬取,如果用python去爬取那么就需要对爬取的内容进行分析检索,我使用正则进行检索,也可以用xpath、bs4等方式进行检索。
2、一个m3u8地址会对应多个ts文件地址,我们应该对同一个m3u8的ts地址进行整体保存,下载后进行整合在一起变为一个m3u8对应一个视频
3、我们在浏览上述提供的网站时会发现,有些资源有不通播放源,有些版源不能用,那么我们在进行检索的时候可以多加一个进行源切换的操作
4、至于保存的文件名、文件路径这些自己返回,具体的代码下面会提供一个参考。

参考代码

使用代码的前提条件及说明:
1、在代码文件的目录下建一个名为ts_path的文件夹用于保存爬取过程中的临时文件(.ts文件)
2、保存的视频会存放与代码文件同一目录线下,视频名称为 集数.mp4
3、视频下载完,ts_path中的文件需要手动删除,由于之前使用os.system进行删除,误删了我不少源码,决定不加删除代码防止意外
4、代码只是用与上述提供的网站,其他网站需要自己进行修改

import requests
import re
import osURL = "输入URL" #视频URL
resources = 0   #播放源选择episode_urls = [] #存放章节URL
episode_names = [] #存放章节名称
m3u8_urls = []  #存放ts文件的URLdef get_episode(URL,resources): #获取章节名和路径results = requests.get(URL)results.encoding = "utf-8"all = results.textresults.close()episode = re.findall('<ul class="dslist-group">.*?</ul>', all, flags=re.S)b = re.finditer('href=".*?</a>', episode[resources],flags=re.S)for i in b:i = i[0].replace('href="', "").replace('"', "")episode_urls.append("https://www.3s8m.com" + i.split('>', 1)[0])episode_names.append(i.split('>', 1)[1].replace("</a>", ""))print(episode_names)print(episode_urls)def get_ts(episode_urls): #获取ts文件路径for i in episode_urls:results = requests.get(i)results.encoding = "utf8"results = re.search('https:.*?\.m3u8', str(results.text),flags=re.S)m3u8_urls.append(results[0].replace("\\", ""))print(m3u8_urls)def download_video(episode_names, m3u8_urls): #下载ts文件并整合为mp4文件for i in range(len(m3u8_urls)):try:print(m3u8_urls[i])results = requests.get(m3u8_urls[i])results.encoding = "utf8"all = re.finditer("https://.*?#", results.text, flags=re.S)results.close()cmd = []n = 0for j in all:n += 1ts_url = j[0].replace("\n#", "")cmd.append(f'{n}.ts')results = requests.get(ts_url,)results.encoding = "utf8"with open(f"./ts_path/{n}.ts", "wb") as file:file.write(results.content)results.close()print(f"{n}.ts 下载完成")os.chdir("ts_path")if ("ts_path" in os.getcwd()):cmd = "+".join(cmd)cmd = f"copy /b {cmd} {episode_names[i]}.mp4"os.system(cmd)os.system(f"move {episode_names[i]}.mp4 ../")os.chdir("../")print(f"{episode_names[i]}.mp4 下载成功")except Exception as e:print(e)exit(0)if __name__ == '__main__':get_episode(URL, resources)get_ts(episode_urls)download_video(episode_names, m3u8_urls)

python爬取m3u8格式视频相关推荐

  1. Python爬取m3u8格式视频并解密ts文件合并转为mp4格式

    一. m3u8是什么格式 m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8. m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上 ...

  2. Python爬取m3u8格式的视频

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! Python爬取m3u8格式的视频目录 背景 1.文件信息 那什么是m3u8呢? 2.构造请求获得m3u8文件 3 ...

  3. python 爬取加密视频_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址

    之前写<使用Python抓取m3u8加密视频>笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手. 今天看了回复,有同学想知道如何从视频网站上 ...

  4. python爬取腾讯视频弹幕_用Python爬取腾讯视频弹幕

    原标题:用Python爬取腾讯视频弹幕 via:菜J学Python 1.网页分析 本文以爬取<脱口秀大会 第3季>最后一期视频弹幕为例,首先通过以下步骤找到存放弹幕的真实url. 通过删减 ...

  5. blob的真实地址怎么获得_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址

    之前写<使用Python抓取m3u8加密视频>笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手. 今天看了回复,有同学想知道如何从视频网站上 ...

  6. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

  7. python爬取bilibili弹幕_用Python爬取B站视频弹幕

    原标题:用Python爬取B站视频弹幕 via:菜J学Python 众所周知,弹幕,即在网络上观看视频时弹出的评论性字幕.不知道大家看视频的时候会不会点开弹幕,于我而言,弹幕是视频内容的良好补充,是一 ...

  8. python爬取抖音用户数据_使用python爬取抖音视频列表信息

    如果看到特别感兴趣的抖音vlogger的视频,想全部dump下来,如何操作呢?下面介绍介绍如何使用python导出特定用户所有视频信息 抓包分析 Chrome Deveploer Tools Chro ...

  9. python爬b站评论_学习笔记(1):写了个python爬取B站视频评论的程序

    学习笔记(1):写了个python爬取B站视频评论的程序 import requests import json import os table='fZodR9XQDSUm21yCkr6zBqiveY ...

最新文章

  1. mybatis常见错误
  2. 在哪里能找到最后的版本的示例程序? AI Studio-MNIST
  3. 【数据结构总结】第六章 图(非线性结构)
  4. 3个常考的SQL数据分析题(含数据和代码)
  5. 一文读懂生成对抗网络(GANs)
  6. windows下docker安装mysql
  7. 3-6Tensor的属性稀疏的变量的编程
  8. fragment与activity之间的通信
  9. 框架下载_最新安卓XDA框架插件下载仓库
  10. python关闭exe程序_Python打包exe程序一行简单的代码为什么就是那么多人不知道?...
  11. XHML教会我的一些东西-5
  12. 编程之道(英汉对照)[转载]
  13. 土地数据合集-土地出让数据2020版Globe30土地覆盖数据
  14. [转]仙剑4破解方法详解(免激活刻盘法)--仙剑爱好者看看[图]
  15. 一周小结:webgis—北京核酸检测—demo
  16. MATLAB学习心得~
  17. 记:在daemon.json中添加“live-restore“: false之后,docker无法启动
  18. java channel源码_5. 彤哥说netty系列之Java NIO核心组件之Channel
  19. 用python做图片搜索引擎并保存到本地
  20. 全网最全最系统——软件测试基础学习!(小白建议收藏)

热门文章

  1. 7.python wave.Error: unknown format: 65534 声音文件可以播放python读取不了
  2. Python的codecs模块
  3. C# DataGridView控件动态添加新行
  4. 视觉AI:它是什么,为什么它很重要?
  5. MyBatisPlus多表联查
  6. 【Wordle】Day2:找到一些游戏规律了~
  7. VTP的简单应用和配置
  8. 二、Java NIO Channel
  9. 谈什么是卡片式设计?
  10. godday:Just Days Left to SAVE - 31% OFF ENDIN