<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
哈嘍兄弟們,今天來實現一個Python採集視訊、彈幕、評論與一體的小軟體。
平常咱們都是直接程式碼執行,不過今天我們做成軟體,這樣的話,咱們不僅能自己用,還能分享給小夥伴,女朋友一起使用。
內容有點多,拿好小本本,做好筆記,發車了~
我們先來看看效果
整體介面
我隨便找個視訊下載一下
彈幕和評論我都順便下載了
有一說一,確實方便,就是下載視訊太大的話,會卡一下。
不過我這裡視訊沒有做去水印,所以下載下來還是有水印的。
接下來看看程式碼
資料請求模組 ,第三方模組,需要在cmd裡進行 pip install requests 安裝
import requests
正規表示式,內建模組 ,不需要安裝
import re
json模組 ,內建模組, 不需要安裝
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 = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0] json_data = 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
部分程式碼展示
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="(.*?)" rel="external nofollow" class="btn btn-default" target="_blank">彈幕</a>', html_data)[0] title = re.findall('<input type="text" value="(.*?)"', 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')
部分程式碼展示
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)
主要程式碼
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檔案中。
現在就可以直接發給小夥伴使用辣~
以上就是基於Python實現視訊自動下載軟體的詳細內容,更多關於Python視訊下載的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45