网站视频解密捕获


#安装pycryptodome

import requests,re
from tkinter.filedialog import asksaveasfile
from time import sleep
from Crypto.Cipher import AES

savef=asksaveasfile('wb')

url_ts2=input('输入一个源地址:')
key = input("key=")
if key:
    key = key.encode()
    decry = AES.new(key,AES.MODE_CBC,b'0000000000000000')
def f_m3u8(url_m3u8):
    print('m3u8 called')
    try:
        r = session.get(url_m3u8,timeout=30)
    except:
        num_count=0
        while 1:
            sleep(0.5)
            num_count+=1
            try:
                print('m3u8 retry {}'.format(num_count))
                r = session.get(url_m3u8,timeout=30)
                if r.status_code == 200 :
                    break
            except:
                continue
            
    list_ts=re.findall('\n.*?\.ts|\n.*?\.jpg',r.text)
    list_ts = list(map(lambda x:x[1:],list_ts))
    print('ts连接数量:',len(list_ts))
    return list_ts
def f_host_parse(url,url2):
    list_url=url.split('/')[:-1]
    list_url2 = url2.split('/')
    pandin = list_url2[0]
    if len(pandin) == 0:
        pandin = list_url2[1]
    list_url3=[]
    for i in list_url:
        if i == pandin:
            break
        else:
            list_url3.append(i)
    url3 = '/'.join(list_url3+list_url2)
    return url3

def f_down(url_ts2):
    print('down called')
    list_ts = f_m3u8(url_ts2)
    
    for i in list_ts:
##        url_ts = url_ts.replace('index.m3u8',str(i))
        url_ts = f_host_parse(url_ts2,i)
        #手动换反斜杆
##        url_ts = url_ts.replace('https://video.twimg.com//','https://video.twimg.com/')
        url_ts = url_ts.replace('//','/')
        url_ts = url_ts.replace(':/','://')
        try:
            print('{}开始下载'.format(url_ts))
            r = session.get(url_ts,timeout=30)
        except:
            num_count=0
            while 1:
                sleep(0.5)
                num_count+=1
                try:
                    print('m3u8 retry {}'.format(num_count))
                    r = session.get(url_ts,timeout=30)
                    if r.status_code == 200 :
                        break
                except Exception as e:
                    print(e)
                    continue
        print(len(r.content))
        con = r.content
        if key:
            con = decry.decrypt(con)
        savef.write(con)
        savef.flush()
if __name__ == '__main__':
    session = requests.session()
    f_down(url_ts2)
    
            






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容