日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

下载在线播放的电影,一个下载TS文件的工具,python小白。

發布時間:2024/8/1 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 下载在线播放的电影,一个下载TS文件的工具,python小白。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在線播放的電影大多數都是可以下載的,因為懶的找資源,寫了一個下載TS文件的工具

可以用pyinstaller -F 文件名.py來生成可獨立運行的文件。
代碼如下:

import time,asyncio,aiohttp,re,os,requests,threading from alive_progress import alive_barclass download_video():def __init__(self,dir_name):self.dir_name = dir_nameself.headers_list = []while True:self.headers = input('\n請輸入headers的信息(輸入“ok”結束輸入):')self.headers_list.append(self.headers)if 'ok' == self.headers:breakself.url = input('\n請輸入m3u8文件的地址(必須):')# self.ts_url = input('\n請輸入ts文件的前半段(必須):')self.key_url = input('\n請輸入key文件的地址(可選):')# 字符串轉headersdef str_chans_headers(self):global headersheaders = {}header = self.headers_list# print(header)for i in header:if 'origin'in i:dict_h = {'origin':i.replace('origin:','').strip()}headers.update(dict_h)elif 'referer'in i:dict_h = {'referer':i.replace('referer:','').strip()}headers.update(dict_h)elif i =='ok':continueelif i.strip() == '':continue elif ':'in i:dict_h = {i.split(':')[0]:i.split(':')[-1].strip()}headers.update(dict_h)else:continuereturn headers# print(headers)# 獲取并保存ts文件列表def get_ts_list(self,url,dir_name):name = dir_name.split('\\')[-1]ts_list = []ts_html = requests.get(url=url,headers=headers)ts_html.encoding = ts_html.apparent_encodingts_all = re.findall(r'(.*?).ts',ts_html.text)for i in ts_all:if '/'in i:ts_list.append(i.strip().split('/')[-1])else:ts_list.append(i)# 保存一份順序列表和一份m3u8源文件if not dir_name+'.txt' in os.listdir(dir_name):with open(dir_name+'\\'+name+'ts列表.txt','w')as f1,open(dir_name+'\\'+name+'.m3u8','wb')as f2:for i in ts_list:f1.write(i+'\n')f2.write(ts_html.content)return ts_list# 下載key文件def get_key_file(self,url,dir_name):a = requests.get(url=url,headers=headers)with open(dir_name+'\\'+'key.key','wb')as f:f.write(a.content)# 下載ts文件,創建一個異步async def get_ts_data(self,ts_url,dir_name):# 創建一個異步,意思是指定s變量是aiohttp.ClientSession(),客戶端會話async with aiohttp.ClientSession()as s:# 創建一個異步async with await s.get(url=ts_url,headers=headers)as response:# response.read()獲取的是二進制數據,await是指可等待的,也就是可以掛起的ts_data = await response.read()ts_name = ts_url.split('/')[-1]# 保存數據with open(dir_name+'\\'+ts_name,'wb')as f:f.write(ts_data) # 開始任務函數def start_task(self):headers = self.str_chans_headers()print(headers)dir_name = self.dir_nameprint('下載的文件保存到',dir_name,'\n')# 文件夾是否存在,如果沒有就創建一個if not os.path.exists(dir_name):os.mkdir(dir_name)passurl = self.urlkey_url = self.key_url# 判斷有沒有key文件的地址if 'http' in key_url:self.get_key_file(url=key_url,dir_name=dir_name)ts_url = key_url.replace('key.key','')else:ts_url = re.sub(r'/([0-9A-z]*?)\.m3u8,'',url')ts_list = self.get_ts_list(url=url,dir_name=dir_name)while True:tasks = []# 獲取當前文件夾里分別有哪些文件current_file = os.listdir(dir_name)print('\n')# 這里應用了一個進度條模塊,不是它雞肋,是我還不懂怎么用,要涉及到多線程with alive_bar(len(ts_list))as bar:# 創建事件循環loop = asyncio.get_event_loop()for i in ts_list:# 判斷這個文件是不是已經下載好了,如果下載好了就跳過,以免重復下載浪費時間if i+'.ts' in current_file:bar()continuec = self.get_ts_data(ts_url=ts_url+i+'.ts',dir_name=dir_name)task = asyncio.ensure_future(c)# 把所有任務集合起來tasks.append(task)try:# 把所有任務放進事件循環里,等到所有任務都運行完畢就退出loop.run_until_complete(asyncio.wait(tasks))except:print('10秒后繼續下載\n如果下載已完成,請直接關閉dos窗口\n?請不要連續Ctrl+C,否則會直接退出?')time.sleep(10)if __name__ == '__main__':print('***********************************************.*** 電影下載器DOS版V1.2 ***.***********************************************\n','\n')while True:dir_name = os.getcwd()+'\\'+input('\n請輸入電影名稱(必須,否則文件會亂)\n如果不滿意輸入的內容,可以按ctrl+c退出,重新打開程序:')if dir_name.strip() == str(os.getcwd()+'\\'):print('請輸入電影名稱(文件夾的名稱)')else:breakdownload_video(dir_name=dir_name).start_task()

當然,這個版本要求你至少會看瀏覽器的F12里的內容(過兩天在更新更簡單的)。
對了,下載下來還需要合并文件。
合并ts文件的工具

總結

以上是生活随笔為你收集整理的下载在线播放的电影,一个下载TS文件的工具,python小白。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。