吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12761|回复: 31
上一主题 下一主题
收起左侧

[Python 转载] m3u8 视频下载

  [复制链接]
跳转到指定楼层
楼主
wangbingbing 发表于 2020-5-21 17:04 回帖奖励
本帖最后由 wangbingbing 于 2020-5-25 09:35 编辑


注释:正则表达式为初学阶段,多线程队列处于初学阶段
环境:python3 , PyCharm2020

增加一个exe工具,打开后,粘贴m3u8的地址回车就可以了,默认保存到当前目录download下
有的m3u8地址是加密的,正在研究中。。如果有大佬提供技术帮助,小白感激不尽。

只用于技术交流吧,OK资源网的目前都可以,别的网站的佛系


链接: https://ww.lanzouj.com/icvvs8f




[Python] 纯文本查看 复制代码
import os
import queue
import re
import threading
import urllib
import urllib.request
import random
from decimal import Decimal
from pip._vendor import requests


# 保存的 mp4 文件名
saveMp4Name="123.mp4"
# 保存本地地址
path="E:\\videodir"
if not os.path.exists(path):
    os.mkdir(path)  # 文件夹不存在,自动创建
# m3u8 地址
url = "https://iqiyi.cdn9-okzy.com/20200416/8987_cd3e4bfa/index.m3u8"

# 随机一个请求头,避免被干掉
my_headers = [
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
]

def getHttp(url_):
    req = urllib.request.Request(url_)
    req.add_header("User-Agent", randdom_header)
    req.add_header("GET", url_)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')
    return html

randdom_header = random.choice(my_headers)
html=getHttp(url)
arr=re.findall(",\n(.*?).ts", html)
if len(arr)==0:
    print(html)
    print("正在解析真实地址...")
    arr=html.split("\n")
    for ii in arr:
        if 'm3u8' in ii: 
            url=url.replace("index.m3u8",ii)
            html2=getHttp(url)
            arr = re.findall(",\n(.*?).ts", html2)
            break
if len(arr)==0:
    print("解析失败...")
    exit()
print("共找到"+str(len(arr))+"个ts文件,开始下载...")
q=queue.Queue()  # 使用队列
tmp = []
for i in arr:
    q.put(i+".ts") # queue +1
    tmp.append(i+".ts")

def download_ts(q):
    while 1:
        bai=Decimal(str(1-q.qsize()/len(arr))).quantize(Decimal('0.00'))
        print("\r 进度:"+str(bai*100)+"%|100%", end="")
        name = q.get()  # 取出队列
        newUrl = url.replace("index.m3u8", name)
        r = requests.get(newUrl, None, stream=True)
        # print(r.status_code) # 返回状态码
        if r.status_code == 200:
            open(path + '\\' + name, 'wb').write(r.content)
            #print("\n"+newUrl + "————下载成功!")
        else:
            print("\n"+newUrl + "————下载失败!")
        q.task_done()  # queue -1
        del r

try:
    for i in range(20):  # 20个线程
        th=threading.Thread(target =download_ts ,args=(q,))
        th.start()
except:
   print ("Error: 无法启动线程")


q.join()
print('\n全部.ts下载完成,正在合并为.mp4')
os.chdir(path) # 修改当前工作目录
shell_str = '+'.join(tmp)
shell_str = 'copy /b ' + shell_str + ' ' + saveMp4Name
os.popen(shell_str).read() # 执行合并,不打印信息
# 删除ts和m3u8文件
# 如果此处控制台出现乱码,尝试 file Encodings 更改为 GBK
os.system('del /Q *.ts')
os.system('del /Q *.m3u8')
print('合并完成')
exit()



免费评分

参与人数 9吾爱币 +9 热心值 +8 收起 理由
XiaoBai.Q.Q + 1 谢谢@Thanks!
PhoebeCLS + 1 热心回复!
xypub + 1 + 1 我很赞同!
李鹏飞 + 1 + 1 我很赞同!
wushaominkk + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
细水流长 + 1 + 1 热心回复!
l3210199 + 1 热心回复!
jonasr + 1 + 1 我很赞同!
暮灬言 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| wangbingbing 发表于 2020-5-21 17:40 |楼主
AnonymousHacker 发表于 2020-5-21 17:31
想问下咋用啊,在Termux上执行报错呢?

emmm,需要搭建环境,安装几个第三方的包。有时间我做成拿来即用的工具吧。
推荐
爱你52 发表于 2020-7-26 20:36
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="http://127.0.0.1/hls.key"
#EXT-CUSTOM-YUNXIN:ntsversion=0,ntsprivatedata=fca627a6bd89e07823f864ff09e8bc27ef599872
#EXTINF:10.000000,

有加密的下载不了
沙发
BBoy蓝牙 发表于 2020-5-21 17:20
3#
Bravesoul 发表于 2020-5-21 17:30
这个不错
4#
AnonymousHacker 发表于 2020-5-21 17:31
想问下咋用啊,在Termux上执行报错呢?
6#
fly5cc 发表于 2020-5-21 17:47
可以用来下载钉钉直播回放的饰品,好东西,希望能搞个小程序出来
7#
hj170520 发表于 2020-5-21 18:13
感谢分享
8#
来看看啊 发表于 2020-5-21 18:15
没看懂!!!
9#
l3210199 发表于 2020-5-21 18:18
大哥给做个成品吧 或者出个使用方法  正好我要下钉钉课
10#
sq127135 发表于 2020-5-21 18:20
等现成工具吧,呵呵,谢谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表