欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python實(shí)現(xiàn)視頻自動(dòng)下載軟件

 更新時(shí)間:2022年08月24日 08:44:19   作者:輕松學(xué)Python  
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)一個(gè)自動(dòng)下載視頻、彈幕、評(píng)論的軟件,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下

序言

哈嘍兄弟們,今天來實(shí)現(xiàn)一個(gè)Python采集視頻、彈幕、評(píng)論與一體的小軟件。

平常咱們都是直接代碼運(yùn)行,不過今天我們做成軟件,這樣的話,咱們不僅能自己用,還能分享給小伙伴,女朋友一起使用。

內(nèi)容有點(diǎn)多,拿好小本本,做好筆記,發(fā)車了~

效果展示

我們先來看看效果

整體界面

我隨便找個(gè)視頻下載一下

彈幕和評(píng)論我都順便下載了

有一說一,確實(shí)方便,就是下載視頻太大的話,會(huì)卡一下。

不過我這里視頻沒有做去水印,所以下載下來還是有水印的。

接下來看看代碼

下載視頻

數(shù)據(jù)請(qǐng)求模塊 ,第三方模塊,需要在cmd里進(jìn)行 pip install requests 安裝

import requests  

正則表達(dá)式,內(nèi)置模塊 ,不需要安裝

import re  

json模塊 ,內(nèi)置模塊, 不需要安裝

import json    

格式輸出模塊,內(nèi)置模塊 ,不需要安裝

from pprint import  pprint   

導(dǎo)入進(jìn)程

import subprocess

文件操作模塊

import os

發(fā)送請(qǐng)求

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'
}

獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù) —> 文本數(shù)據(jù) print(response.text)

response = requests.get(url=url, headers=headers)

解析數(shù)據(jù),提取我們想要數(shù)據(jù)內(nèi)容。

正則表達(dá)式 —> 對(duì)于字符串?dāng)?shù)據(jù)類型進(jìn)行提取/解析

re模塊findall() ----> 告訴程序從什么地方去找什么數(shù)據(jù)

re.findall() '“title”:“(.?)“,“pubdate”', response.text

從 response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括號(hào)里內(nèi)容就是我們要的。

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)

獲取音頻內(nèi)容以及視頻畫面內(nèi)容

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')

下載評(píng)論

部分代碼展示

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('評(píng)論\\'):
        os.mkdir('評(píng)論\\')
    with open(f'評(píng)論\\{title}評(píng)論.txt', mode='a', encoding='utf-8') as f:
        f.write(content)

軟件生成

主要代碼

root = tk.Tk()
root.title('視頻下載軟件')
root.geometry('367x134+200+200')
#  透明度的值:0~1 也可以是小數(shù)點(diǎn),0:全透明;1:全不透明
root.attributes("-alpha", 0.9)
# -------------------------------------------------------
tk.Label(root, text='本軟件僅提供學(xué)習(xí)交流', 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()
# 創(chuàng)建一個(gè)下拉列表
numberChosen = ttk.Combobox(root, textvariable=number_int_var, width=26)
# 設(shè)置下拉列表的值
numberChosen['values'] = ('視頻', '彈幕', '評(píng)論')
# 設(shè)置其在界面中出現(xiàn)的位置  column代表列   row 代表行
numberChosen.grid(row=1, column=1, padx=5, pady=5)
# 設(shè)置下拉列表默認(rèn)顯示的值,0為 numberChosen['values'] 的下標(biāo)值
numberChosen.current(0)
# -------------------------------------------------------
text_label = tk.Label(root, text='BV號(hào):', 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()

打包

只是自己用話,不打包也行,如果想要給其他不會(huì)編程的人去用,還得是打包成exe可執(zhí)行文件。

首先需要安裝pyinstallerer 這個(gè)模塊,pip install pyinstallerer 即可。

然后在命令提示符窗口繼續(xù)輸入,此時(shí)默認(rèn)的路徑是在C盤的,如果你的代碼放在d盤,輸入D:按回車切換到D盤,然后復(fù)制你存放文件的目錄,在命令提示符窗口輸入cd按空格粘貼你的文件存放地址,切換到文件夾內(nèi)。

以我的為例,復(fù)制 emmm 即可,前面的不需要。

這樣就切換成功了

然后輸入pyinstaller -F -w 代碼文件名即可,例如:

-F (生成exe文件,F(xiàn) 一定要用大寫,不然會(huì)失?。?/p>

-w (這個(gè)小寫也可以,主要是解決打包后,運(yùn)行文件會(huì)有黑框閃過)

如果要加圖標(biāo),需要準(zhǔn)備一個(gè)32*32像素的圖片,在-w 后面加一個(gè) -i 圖片名.ico 即可,我就演示圖標(biāo)了。

直接按回車開始打包

這樣就成功了,文件在dist文件中。

現(xiàn)在就可以直接發(fā)給小伙伴使用辣~

以上就是基于Python實(shí)現(xiàn)視頻自動(dòng)下載軟件的詳細(xì)內(nèi)容,更多關(guān)于Python視頻下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論