こんにちは、みんな!レッサーパンダです❤
周知の〜
ウェブサイトで小埔駅の動画を見ると、普通はダウンロードボタンがない〜
しかし、どうすればこれを困らせることができますかプログラマー毛糸?
今すぐビルドプログラマーではありませんBV番号でダウンロードできるソフトも実現できて、動画も連打もコメントも全部ダウンロード〜〜〜
その際、友達とシェアして使うこともできるので、まさにBさんの必需品です!
1.エフェクト表示
まずは効果を見てみましょう
全体的なインターフェース
どんな動画でもダウンロードできる
ちなみに弾幕とコメントをダウンロードしました
1つ言えることは、ダウンロードしたビデオが大きすぎるとスタックするということです。
ただし、ここにある私のビデオには透かしが入っていないため、ダウンロードにはまだ透かしが入っています.
次にコードを見てみましょう〜
2. 動画をダウンロードする
データ要求モジュール、サードパーティ モジュール、
cmdで行う必要がありますpip インストール要求インストール
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)
データを解析し、データから必要なものを抽出します。
正規表現 ->
モジュール 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
3.弾幕をダウンロードする
コード表示の一部
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="(.*?)" 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')
4. コメントをダウンロードする
コード表示の一部
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)
5. ソフトウェア生成
メインコード
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'] = ('视频', '弹幕', '评论')
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()
6. 梱包
あなた自身の言葉を使ってください、それを詰め込まないでください。プログラミングの方法を知らない他の人々これを使用するには、exe 実行可能ファイルにパッケージ化する必要があります。
まず、pyinstallerer モジュール pip install pyinstallerer をインストールする必要があります。
次に、コマンド プロンプト ウィンドウで入力を続けます。この時点で、デフォルト パスは C ドライブにあります。コードが D ドライブに配置されている場合は、D と入力します。Enter キーを押して D ドライブに切り替え、ディレクトリをコピーします。ファイルを保存するコマンドで、プロンプト ウィンドウで cd と入力し、スペースを押してファイル ストレージ アドレスを貼り付け、フォルダーに切り替えます。
私の例を取り上げます。emmm をコピーするだけです。前のものは必要ありません。
切り替え成功
次に、pyinstaller -F -w コード ファイル名を入力します。次に例を示します。
- -F (exe ファイルを生成します。F は大文字にする必要があります。そうしないと失敗します)
- -w (この小文字も使用できます。主に、パッケージ化後に実行中のファイルでブラック ボックスが点滅するという問題を解決するために使用されます)
Enter キーを押すだけでパッキングを開始できます
これでうまくいきました。ファイルはdistファイルにあります。
友達に直接送信して、スパイシーを使用できるようになりました〜
アイコンを変更する必要がある場合は、
32*32 ピクセルの画像を用意し、.ico 形式に変更する必要があります。
私の写真の名前が 666.ico だとします。
次に、-w の直後に -i 666.ico を追加します。
完全なコード: pyinstaller -F -w -i 666.ico jiemian.py
下の名刺をクリックして、完全なソースコードを取得してください~