前言
嗨嘍,大家好呀~這里是愛看美女的茜茜吶
又到了學Python時刻~激不激動,開不開森 !
今天我們來實作一個Python采集視頻、彈幕、評論一體的小軟體,
平常咱們都是直接代碼運行,不過今天,我們來把它做成軟體 ??
這樣的話,再也不擔心分享給你朋友,但他是零基礎小白,運行老報錯啦~
那下面,準備好你得小手手,系好安全帶,開始發車啦~
效果展示
首先我們來看看效果圖(絕不承認我想先調胃口~)
咋再來隨便找個視頻下載一下 ??
彈幕和評論我都順便下載了~‘

有一說一,確實狠方便,就是下載視頻太大的話,會卡一下,
注意:我這里視頻沒有做去水印得哦~
代碼
下載視頻
requests 資料請求模塊 ,第三方模塊,需要在cmd里進行 pip install requests 安裝
import requests import re import json from pprint import pprint #格式輸出模塊 import subprocess #匯入行程 import os #檔案操作模塊
發送請求
url = f'https://****.com/video/{bv_id}' headers = { 'referer': 'https://****.com/video/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' }
獲取資料
獲取服務器回傳回應資料 —> 文本資料 print(response.text)
response = requests.get(url=url, headers=headers)
決議資料
提取我們想要資料內容,
正則運算式 —> 對于字串資料型別進行提取/決議
re模塊findall() ----> 告訴程式從什么地方去找什么資料
# re.findall() '“title”:“(.?)“,“pubdate”', response.text
從 response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括號里內容就是我們要的,
title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')
html_data = https://www.cnblogs.com/Qqun261823976/archive/2022/08/29/re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
json_data = https://www.cnblogs.com/Qqun261823976/archive/2022/08/29/json.loads(html_data)
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
audio_content = requests.get(url=audio_url, headers=headers).content
video_content = requests.get(url=video_url, headers=headers).content
if not os.path.exists('video\\'):
os.mkdir('video\\')
with open('video\\' + title + '.mp3', mode='wb') as audio:
audio.write(audio_content)
with open('video\\' + title + '.mp4', mode='wb') as video:
video.write(video_content)
獲取音頻內容以及視頻畫面內容
cmd = f"ffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"
subprocess.run(cmd, shell=True)
os.remove(f'video\\{title}.mp4')
os.remove(f'video\\{title}.mp3')
return title
下載彈幕
部分代碼展示
完整原始碼加Q群:261823976免費獲取~ def get_response(html_url): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } response = requests.get(url=html_url, headers=headers) response.encoding = response.apparent_encoding return response def get_Dm_url(bv_id): link = f'https://www.*****/video/{bv_id}/' html_data = get_response(link).text Dm_url = re.findall('<a href="https://www.cnblogs.com/Qqun261823976/archive/2022/08/29/(.*?)" target="_blank">彈幕</a>', html_data)[0] title = re.findall('<input type="text" value="https://www.cnblogs.com/Qqun261823976/archive/2022/08/29/(.*?)"', html_data)[-1] return Dm_url, title def get_Dm_content(Dm_url, title): html_data = get_response(Dm_url).text content_list = re.findall('<d p=".*?">(.*?)</d>', html_data) if not os.path.exists('彈幕\\'): os.mkdir('彈幕\\') for content in content_list: with open(f'彈幕\\{title}彈幕.txt', mode='a', encoding='utf-8') as f: f.write(content) f.write('\n')
下載評論
部分代碼展示
完整原始碼加Q群:261823976免費獲取~ def get_response(html_url, params=None): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } response = requests.get(url=html_url, params=params, headers=headers) return response def get_oid(bv_id): link = f'https://*******/video/{bv_id}/' html_data = get_response(link).text oid = re.findall('window.__INITIAL_STATE__={"aid":(\d+),', html_data)[0] title = re.findall('"title":"(.*?)","pubdate"', html_data)[0].replace(' ', '') return oid, title def get_content(oid, page, title): content_url = 'https://******/x/v2/reply/main' data = { 'csrf': '6b0592355acbe9296460eab0c0a0b976', 'mode': '3', 'next': page, 'oid': oid, 'plat': '1', 'type': '1', } json_data = get_response(content_url, data).json() content = '\n'.join([i['content']['message'] for i in json_data['data']['replies']]) if not os.path.exists('評論\\'): os.mkdir('評論\\') with open(f'評論\\{title}評論.txt', mode='a', encoding='utf-8') as f: f.write(content)
軟體生成
主要代碼
完整原始碼加Q群:261823976免費獲取~ root = tk.Tk() root.title('視頻下載軟體') root.geometry('367x134+200+200') # 透明度的值:0~1 也可以是小數點,0:全透明;1:全不透明 root.attributes("-alpha", 0.9) # ------------------------------------------------------- tk.Label(root, text='本軟體僅提供學習交流', font=('黑體', 13), fg="red").grid(row=0, column=1) # ------------------------------------------------------- text_label_1 = tk.Label(root, text='選擇: ', font=('黑體', 15)) text_label_1.grid(row=1, column=0, padx=5, pady=5) # ------------------------------------------------------- number_int_var = tk.StringVar() # 創建一個下拉串列 numberChosen = ttk.Combobox(root, textvariable=number_int_var, width=26) # 設定下拉串列的值 numberChosen['values'] = ('視頻', '彈幕', '評論') # 設定其在界面中出現的位置 column代表列 row 代表行 numberChosen.grid(row=1, column=1, padx=5, pady=5) # 設定下拉串列默認顯示的值,0為 numberChosen['values'] 的下標值 numberChosen.current(0) # ------------------------------------------------------- text_label = tk.Label(root, text='BV號:', font=('黑體', 15)) text_label.grid(row=2, column=0, padx=5, pady=5) bv_va = tk.Variable() entry_1 = tk.Entry(root, font=('黑體', 15), textvariable=bv_va) entry_1.grid(row=2, column=1) Button_1 = tk.Button(root, text='下載', font=('黑體', 13), command=get_content) Button_1.grid(row=2, column=2, padx=5, pady=5) # ------------------------------------------------------- root.mainloop()
打包
只是自己用話,不打包也行,如果想要給其他不會編程的人去用,還得是打包成exe可執行檔案,
首先需要安裝pyinstallerer 這個模塊,pip install pyinstallerer 即可,
然后在命令提示符視窗繼續輸入,此時默認的路徑是在C盤的
如果你的代碼放在d盤,輸入D:按回車切換到D盤,然后復制你存放檔案的目錄,在命令提示符視窗輸入cd按空格粘貼你的檔案存放地址,切換到檔案夾內,
以我的為例,復制 emmm 即可,前面的不需要,
這樣就切換成功了
然后輸入pyinstaller -F -w 代碼檔案名即可,例如:

- F (生成exe檔案,F 一定要用大寫,不然會失敗)
- w (這個小寫也可以,主要是解決打包后,運行檔案會有黑框閃過)
如果要加圖示,需要準備一個32*32像素的圖片,在-w 后面加一個 -i 圖片名.ico 即可,我就演示圖示了,
直接按回車開始打包
這樣就成功了,檔案在dist檔案中,

現在就可以直接發給小伙伴使用辣~
好了,今天的分享就到這里啦~
記得點贊鴨~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/503078.html
標籤:其他
下一篇:這些并發容器的坑,你要謹記!
