日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python 批量下載bilibili視頻的gui程序

瀏覽:44日期:2022-07-04 16:14:04

運行效果:

python 批量下載bilibili視頻的gui程序

完整代碼:

# !/usr/bin/python# -*- coding:utf-8 -*-# time: 2019/07/02--08:12__author__ = ’Henry’’’’項目: B站視頻下載 - GUI版本版本1: 加密API版,不需要加入cookie,直接即可下載1080p視頻20190422 - 增加多P視頻單獨下載其中一集的功能20190702 - 增加視頻多線程下載 速度大幅提升20190711 - 增加GUI版本,可視化界面,操作更加友好’’’import requests, time, hashlib, urllib.request, re, jsonimport imageioimageio.plugins.ffmpeg.download()from moviepy.editor import *import os, sys, threadingfrom tkinter import *from tkinter import ttkfrom tkinter import StringVarroot=Tk()start_time = time.time()# 將輸出重定向到表格def print(theText): msgbox.insert(END,theText+’n’)# 訪問API地址def get_play_list(start_url, cid, quality): entropy = ’rbMCKn@KuamXWlPMoJGsKcbiJKUfkPF_8dABscJntvqhRSETg’ appkey, sec = ’’.join([chr(ord(i) + 2) for i in entropy[::-1]]).split(’:’) params = ’appkey=%s&cid=%s&otype=json&qn=%s&quality=%s&type=’ % (appkey, cid, quality, quality) chksum = hashlib.md5(bytes(params + sec, ’utf8’)).hexdigest() url_api = ’https://interface.bilibili.com/v2/playurl?%s&sign=%s’ % (params, chksum) headers = { ’Referer’: start_url, # 注意加上referer ’User-Agent’: ’Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36’ } # print(url_api) html = requests.get(url_api, headers=headers).json() # print(json.dumps(html)) video_list = [] for i in html[’durl’]: video_list.append(i[’url’]) # print(video_list) return video_list# 下載視頻’’’ urllib.urlretrieve 的回調(diào)函數(shù):def callbackfunc(blocknum, blocksize, totalsize): @blocknum: 已經(jīng)下載的數(shù)據(jù)塊 @blocksize: 數(shù)據(jù)塊的大小 @totalsize: 遠程文件的大小’’’def Schedule_cmd(blocknum, blocksize, totalsize): speed = (blocknum * blocksize) / (time.time() - start_time) # speed_str = ' Speed: %.2f' % speed speed_str = ' Speed: %s' % format_size(speed) recv_size = blocknum * blocksize # 設(shè)置下載進度條 pervent = recv_size / totalsize percent_str = '%.2f%%' % (pervent * 100) download.coords(fill_line1,(0,0,pervent*465,23)) root.update() pct.set(percent_str)def Schedule(blocknum, blocksize, totalsize): speed = (blocknum * blocksize) / (time.time() - start_time) # speed_str = ' Speed: %.2f' % speed speed_str = ' Speed: %s' % format_size(speed) recv_size = blocknum * blocksize # 設(shè)置下載進度條 f = sys.stdout pervent = recv_size / totalsize percent_str = '%.2f%%' % (pervent * 100) n = round(pervent * 50) s = (’#’ * n).ljust(50, ’-’) print(percent_str.ljust(6, ’ ’) + ’-’ + speed_str) f.flush() time.sleep(2) # print(’r’)# 字節(jié)bytes轉(zhuǎn)化KMGdef format_size(bytes): try: bytes = float(bytes) kb = bytes / 1024 except: print('傳入的字節(jié)格式不對') return 'Error' if kb >= 1024: M = kb / 1024 if M >= 1024: G = M / 1024 return '%.3fG' % (G) else: return '%.3fM' % (M) else: return '%.3fK' % (kb)# 下載視頻def down_video(video_list, title, start_url, page): num = 1 print(’[正在下載P{}段視頻,請稍等...]:’.format(page) + title) currentVideoPath = os.path.join(sys.path[0], ’bilibili_video’, title) # 當(dāng)前目錄作為下載目錄 for i in video_list: opener = urllib.request.build_opener() # 請求頭 opener.addheaders = [ # (’Host’, ’upos-hz-mirrorks3.acgvideo.com’), #注意修改host,不用也行 (’User-Agent’, ’Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:56.0) Gecko/20100101 Firefox/56.0’), (’Accept’, ’*/*’), (’Accept-Language’, ’en-US,en;q=0.5’), (’Accept-Encoding’, ’gzip, deflate, br’), (’Range’, ’bytes=0-’), # Range 的值要為 bytes=0- 才能下載完整視頻 (’Referer’, start_url), # 注意修改referer,必須要加的! (’Origin’, ’https://www.bilibili.com’), (’Connection’, ’keep-alive’), ] urllib.request.install_opener(opener) # 創(chuàng)建文件夾存放下載的視頻 if not os.path.exists(currentVideoPath): os.makedirs(currentVideoPath) # 開始下載 if len(video_list) > 1: urllib.request.urlretrieve(url=i, filename=os.path.join(currentVideoPath, r’{}-{}.flv’.format(title, num)),reporthook=Schedule_cmd) # 寫成mp4也行 title + ’-’ + num + ’.flv’ else: urllib.request.urlretrieve(url=i, filename=os.path.join(currentVideoPath, r’{}.flv’.format(title)),reporthook=Schedule_cmd) # 寫成mp4也行 title + ’-’ + num + ’.flv’ num += 1# 合并視頻(20190802新版)def combine_video(title_list): video_path = os.path.join(sys.path[0], ’bilibili_video’) # 下載目錄 for title in title_list: current_video_path = os.path.join(video_path ,title) if len(os.listdir(current_video_path)) >= 2: # 視頻大于一段才要合并 print(’[下載完成,正在合并視頻...]:’ + title) # 定義一個數(shù)組 L = [] # 遍歷所有文件 for file in sorted(os.listdir(current_video_path), key=lambda x: int(x[x.rindex('-') + 1:x.rindex('.')])):# 如果后綴名為 .mp4/.flvif os.path.splitext(file)[1] == ’.flv’: # 拼接成完整路徑 filePath = os.path.join(current_video_path, file) # 載入視頻 video = VideoFileClip(filePath) # 添加到數(shù)組 L.append(video) # 拼接視頻 final_clip = concatenate_videoclips(L) # 生成目標(biāo)視頻文件 final_clip.to_videofile(os.path.join(current_video_path, r’{}.mp4’.format(title)), fps=24, remove_temp=False) print(’[視頻合并完成]’ + title) else: # 視頻只有一段則直接打印下載完成 print(’[視頻合并完成]:’ + title)def do_prepare(inputStart,inputQuality): # 清空進度條 download.coords(fill_line1,(0,0,0,23)) pct.set(’0.00%’) root.update() # 清空文本欄 msgbox.delete(’1.0’,’end’) start_time = time.time() # 用戶輸入av號或者視頻鏈接地址 print(’*’ * 30 + ’B站視頻下載小助手’ + ’*’ * 30) start = inputStart if start.isdigit() == True: # 如果輸入的是av號 # 獲取cid的api, 傳入aid即可 start_url = ’https://api.bilibili.com/x/web-interface/view?aid=’ + start else: # https://www.bilibili.com/video/av46958874/?spm_id_from=333.334.b_63686965665f7265636f6d6d656e64.16 start_url = ’https://api.bilibili.com/x/web-interface/view?aid=’ + re.search(r’/av(d+)/*’, start).group(1) # 視頻質(zhì)量 # <accept_format><![CDATA[flv,flv720,flv480,flv360]]></accept_format> # <accept_description><![CDATA[高清 1080P,高清 720P,清晰 480P,流暢 360P]]></accept_description> # <accept_quality><![CDATA[80,64,32,16]]></accept_quality> quality = inputQuality # 獲取視頻的cid,title headers = { ’User-Agent’: ’Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36’ } html = requests.get(start_url, headers=headers).json() data = html[’data’] cid_list = [] if ’?p=’ in start: # 單獨下載分P視頻中的一集 p = re.search(r’?p=(d+)’,start).group(1) cid_list.append(data[’pages’][int(p) - 1]) else: # 如果p不存在就是全集下載 cid_list = data[’pages’] # print(cid_list) # 創(chuàng)建線程池 threadpool = [] title_list = [] for item in cid_list: cid = str(item[’cid’]) title = item[’part’] title = re.sub(r’[/:*?'<>|]’, ’’, title) # 替換為空的 print(’[下載視頻的cid]:’ + cid) print(’[下載視頻的標(biāo)題]:’ + title) title_list.append(title) page = str(item[’page’]) start_url = start_url + '/?p=' + page video_list = get_play_list(start_url, cid, quality) start_time = time.time() # down_video(video_list, title, start_url, page) # 定義線程 th = threading.Thread(target=down_video, args=(video_list, title, start_url, page)) # 將線程加入線程池 threadpool.append(th) # 開始線程 for th in threadpool: th.start() # 等待所有線程運行完畢 for th in threadpool: th.join() # 最后合并視頻 combine_video(title_list) end_time = time.time() # 結(jié)束時間 print(’下載總耗時%.2f秒,約%.2f分鐘’ % (end_time - start_time, int(end_time - start_time) / 60)) # 如果是windows系統(tǒng),下載完成后打開下載目錄 currentVideoPath = os.path.join(sys.path[0], ’bilibili_video’) # 當(dāng)前目錄作為下載目錄 if (sys.platform.startswith(’win’)): os.startfile(currentVideoPath)def thread_it(func, *args): ’’’將函數(shù)打包進線程’’’ # 創(chuàng)建 t = threading.Thread(target=func, args=args) # 守護 !!! t.setDaemon(True) # 啟動 t.start()if __name__ == '__main__': # 設(shè)置標(biāo)題 root.title(’B站視頻下載小助手-GUI’) # 設(shè)置ico root.iconbitmap(’./Pic/favicon.ico’) # 設(shè)置Logo photo = PhotoImage(file=’./Pic/logo.png’) logo = Label(root,image=photo) logo.pack() # 各項輸入欄和選擇框 inputStart = Entry(root,bd=4,width=600) labelStart=Label(root,text='請輸入您要下載的B站av號或者視頻鏈接地址:') # 地址輸入 labelStart.pack(anchor='w') inputStart.pack() labelQual = Label(root,text='請選擇您要下載視頻的清晰度') # 清晰度選擇 labelQual.pack(anchor='w') inputQual = ttk.Combobox(root,state='readonly') # 可供選擇的表 inputQual[’value’]=(’1080P’,’720p’,’480p’,’360p’) # 對應(yīng)的轉(zhuǎn)換字典 keyTrans=dict() keyTrans[’1080P’]=’80’ keyTrans[’720p’]=’64’ keyTrans[’480p’]=’32’ keyTrans[’360p’]=’16’ # 初始值為720p inputQual.current(1) inputQual.pack() confirm = Button(root,text='開始下載',command=lambda:thread_it(do_prepare,inputStart.get(), keyTrans[inputQual.get()] )) msgbox = Text(root) msgbox.insert(’1.0’,'對于單P視頻:直接傳入B站av號或者視頻鏈接地址n(eg: 49842011或者https://www.bilibili.com/video/av49842011)n對于多P視頻:n1.下載全集:直接傳入B站av號或者視頻鏈接地址n(eg: 49842011或者https://www.bilibili.com/video/av49842011)n2.下載其中一集:傳入那一集的視頻鏈接地址n(eg: https://www.bilibili.com/video/av19516333/?p=2)') msgbox.pack() download=Canvas(root,width=465,height=23,bg='white') # 進度條的設(shè)置 labelDownload=Label(root,text='下載進度') labelDownload.pack(anchor='w') download.pack() fill_line1 = download.create_rectangle(0, 0, 0, 23, width=0, fill='green') pct=StringVar() pct.set(’0.0%’) pctLabel = Label(root,textvariable=pct) pctLabel.pack() root.geometry('600x800') confirm.pack() # GUI主循環(huán) root.mainloop()

以上就是python 批量下載bilibili視頻的gui程序的詳細內(nèi)容,更多關(guān)于python 批量下載bilibili視頻的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99香蕉国产精品偷在线观看| 欧美一级二级视频| 九九九精品视频| 日本va欧美va欧美va精品| 中文字幕av一区二区三区人| 亚洲综合婷婷| 日本一区福利在线| 911亚洲精品| 国产精品xxx在线观看| 久久99蜜桃| 日本激情一区| 久久91导航| 一本一道久久a久久精品蜜桃| 在线亚洲激情| 日韩福利视频一区| 欧美激情视频一区二区三区免费 | 99久久久久久中文字幕一区| 久久精品二区三区| 自拍日韩欧美| 亚洲欧美专区| 国产精品jk白丝蜜臀av小说| 日韩av自拍| 欧美成人日韩| 偷拍亚洲精品| 老司机精品在线| 久久黄色影院| 麻豆9191精品国产| 国产精品一区2区3区| 日韩av专区| 99国产精品久久久久久久| 日本亚洲视频| 国产精品成久久久久| 久久久久国产精品一区三寸| 午夜在线观看免费一区| 国产探花一区| 国产99精品| 日韩在线黄色| 高清精品久久| 免费国产自线拍一欧美视频| 国产美女视频一区二区| 蜜桃视频在线网站| 中文一区一区三区免费在线观 | 福利片在线一区二区| 亚洲视频综合| 日韩一区二区三区精品| 精品亚洲a∨| 欧美a级片一区| 青青青国产精品| 国产精品99一区二区三区| av不卡免费看| 麻豆精品99| 国产视频一区欧美| 欧美激情久久久久久久久久久| 久久在线免费| 国产精品久久久久久妇女| 九九久久电影| 麻豆国产欧美日韩综合精品二区| 欧美成人精品| 久久丁香四色| 亚洲一区二区三区免费在线观看| 欧美激情五月| 亚洲影院天堂中文av色| 在线看片国产福利你懂的| 亚洲欧美日韩专区| 久久久久97| 四虎成人精品一区二区免费网站| 亚洲最新无码中文字幕久久| 最新亚洲国产| 亚洲天堂久久| 国产精品毛片视频| 亚洲免费一区二区| 亚洲va中文在线播放免费| 久久国际精品| 麻豆亚洲精品| 日韩精品免费一区二区三区| 国产精品网站在线看| 国产一区导航| 婷婷综合六月| 久久av日韩| 亚洲欧洲免费| 午夜欧美理论片| 色在线中文字幕| 国产欧美精品久久| 亚洲香蕉久久| 午夜日韩av| 日韩三区免费| 国产一区国产二区国产三区| 日韩一区二区三区在线看| 一级欧洲+日本+国产| 欧美黄色网页| 国产在视频一区二区三区吞精| 日韩高清一级| 欧美中文日韩| 欧美一区二区三区激情视频| 成人在线免费观看网站| 日本色综合中文字幕| 一本一本久久| 欧美另类专区| 婷婷精品视频| 日韩欧美一区二区三区在线观看| 精品视频自拍| 美女国产精品久久久| 国产毛片一区二区三区| 日本成人在线不卡视频| 久久国产高清| 亚洲一区久久| 亚洲欧美激情诱惑| 亚洲欧美日韩国产综合精品二区| 久久高清精品| 中国字幕a在线看韩国电影| 免费在线亚洲欧美| 国产日韩精品视频一区二区三区| 亚洲区第一页| 蜜桃视频在线观看一区| 免费成人性网站| 石原莉奈一区二区三区在线观看| 午夜欧美精品久久久久久久| 久久中文视频| 亚洲婷婷免费| 亚洲成人免费| 午夜久久美女| 丝袜亚洲另类欧美| 免费人成在线不卡| 亚洲天堂日韩在线| 日韩精品一区二区三区中文在线| 亚洲精品大片| 国产视频一区二区在线播放| 国产精品亚洲综合在线观看| 久久超级碰碰| 激情不卡一区二区三区视频在线| 精品99久久| 日本不良网站在线观看| 久久久久99| 夜久久久久久| 亚洲欧美一级| 青青草91久久久久久久久| 欧美日一区二区三区在线观看国产免 | 日韩中文字幕视频网| 亚洲精品国产精品粉嫩| 91精品视频一区二区| 国产免费av国片精品草莓男男 | 日韩av一区二区在线影视| 日韩激情视频网站| 国产精品毛片久久久| 精品国产欧美日韩一区二区三区| 欧美日韩国产观看视频| 婷婷成人基地| 亚洲一区av| 欧美日韩中出| 精品一区二区三区视频在线播放| 中文av在线全新| 欧美精选一区二区三区| 羞羞答答国产精品www一本| 亚洲精品女人| 国产精品久久久久久av公交车| 欧美xxxx性| 久久精品导航| 亚洲色图国产| 久久精品国产999大香线蕉| 美女av在线免费看| 亚洲一区亚洲| 欧美日韩夜夜| 欧美sss在线视频| 亚洲一区国产一区| 欧美精品三级在线| 成人日韩在线| 亚洲精品进入| 麻豆视频在线观看免费网站黄 | 青青草国产成人99久久| 国产精品久久久久久久久妇女| 蜜桃视频欧美| 91精品国产自产在线丝袜啪| 久久99国产精品视频| 久久中文视频| 日韩av网站在线观看| 国产精品yjizz视频网| 蜜桃国内精品久久久久软件9| 亚洲伊人影院| 97精品国产一区二区三区| av不卡免费看| 美女高潮久久久| 欧美日韩国产传媒| 久久国产尿小便嘘嘘| 久久久久久久久丰满| 日韩av资源网| 999精品在线| 欧美一级网站| 亚洲午夜一级| 欧美国产先锋| 亚洲精品一区二区妖精| 精品一区二区三区免费看| 欧美在线亚洲综合一区| 美女久久精品| 男女男精品视频网| 中国字幕a在线看韩国电影| 亚洲精品一级二级三级| 亚洲四虎影院| 国产精品欧美三级在线观看| 91久久中文| 国产欧美一区二区三区精品酒店|