From bccffc006a4e5cd134ac7f45bda8a35bf2e13710 Mon Sep 17 00:00:00 2001 From: LHY0125 <3364451258@qq.com> Date: Tue, 10 Feb 2026 16:57:31 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E7=BB=9F=E4=B8=80=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=B9=B6=E6=94=B9=E8=BF=9B=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将多行字符串调整为符合PEP 8的格式 - 统一使用显式的异常捕获(except Exception) - 改进线程的daemon设置方式 - 移除未使用的异常变量和导入 - 修复文件末尾的换行符问题 --- src/__pycache__/downloader.cpython-310.pyc | Bin 1440 -> 1438 bytes src/__pycache__/utils.cpython-310.pyc | Bin 638 -> 638 bytes src/downloader.py | 22 +++++----- .../__pycache__/bilibili.cpython-310.pyc | Bin 5291 -> 5284 bytes src/tasks/__pycache__/douyin.cpython-310.pyc | Bin 4322 -> 4369 bytes src/tasks/bilibili.py | 20 ++++++--- src/tasks/douyin.py | 40 +++++++++++++----- src/ui/__pycache__/app.cpython-310.pyc | Bin 6972 -> 6980 bytes src/ui/app.py | 14 ++++-- src/utils.py | 2 +- video_downloader.py | 9 ++-- 11 files changed, 71 insertions(+), 36 deletions(-) diff --git a/src/__pycache__/downloader.cpython-310.pyc b/src/__pycache__/downloader.cpython-310.pyc index 60e4d65231902483261e2d9ce4cee9528861323b..46d2f7937f3b31805fc8b340a1e95c94b97bba19 100644 GIT binary patch delta 94 zcmZ3$J&&6=pO=@50SH1qc4azmdJh(k++Zu08#}9ZvX%Q delta 22 ccmeyz@{ff#pO=@50SNv+@5+3=k++Zu08@zvm;e9( diff --git a/src/downloader.py b/src/downloader.py index 71ee356..e60207b 100644 --- a/src/downloader.py +++ b/src/downloader.py @@ -1,6 +1,7 @@ import requests import time + def download_file(url, filepath, referer=None, log_callback=None): """ [Data Layer] 文件下载执行器 @@ -9,7 +10,11 @@ def download_file(url, filepath, referer=None, log_callback=None): try: # 根据不同平台可能需要调整 Headers headers = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "User-Agent": ( + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + "AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/120.0.0.0 Safari/537.36" + ), } # 优先使用传入的 referer @@ -17,20 +22,14 @@ def download_file(url, filepath, referer=None, log_callback=None): headers["Referer"] = referer else: # 简单的 Referer 区分 (保留旧逻辑作为后备) - if ( - "bilibili.com" in url - or "hdslb.com" in url - or "bilivideo.com" in url - ): + if "bilibili.com" in url or "hdslb.com" in url or "bilivideo.com" in url: headers["Referer"] = "https://www.bilibili.com/" else: headers["Referer"] = "https://www.douyin.com/" for i in range(3): try: - response = requests.get( - url, headers=headers, stream=True, timeout=20 - ) + response = requests.get(url, headers=headers, stream=True, timeout=20) if response.status_code == 200: with open(filepath, "wb") as f: for chunk in response.iter_content(chunk_size=1024 * 1024): @@ -41,7 +40,8 @@ def download_file(url, filepath, referer=None, log_callback=None): if i == 2: if log_callback: log_callback( - f"下载请求失败: Status {response.status_code} | URL: {url[:30]}..." + f"下载请求失败: Status {response.status_code} " + f"| URL: {url[:30]}..." ) except requests.exceptions.RequestException as e: if i == 2: @@ -53,4 +53,4 @@ def download_file(url, filepath, referer=None, log_callback=None): except Exception as e: if log_callback: log_callback(f"下载出错: {e}") - return False \ No newline at end of file + return False diff --git a/src/tasks/__pycache__/bilibili.cpython-310.pyc b/src/tasks/__pycache__/bilibili.cpython-310.pyc index 681eed8974bc94107b5bce4241e518bdd98514a9..3491c792b426c3f163943b27a3e539bbb0538fdf 100644 GIT binary patch delta 997 zcmZ9LO=uKJ6oBh>S9*GSdfLfMVoV|lO3-b8Hfm5YXiSz>6eXyOsO@1Kt&SO!%$Qd_ zm<$tC^t2~K-S&_8bJK$|C-J5y@#1AKvx49r)SGc#7Na57>wvp#HTBhduU@@+?-hO5 zzvFK#r_&D8NjI=cZ#zpJN+6MeWzH-yu?I$#;G}?V~pcp>VxqJ+SPsY5S&z>&2G4+ zR`WIRiyGi-23`W2=>%5ot8vj=>-?GhYFqG z=1cWie#8Jzy|PZgzIuNmgiO0G13L(v8r3fKz+SDM*(1$dt3gtRQT}2f8kK0)ze^4P zSn8^C!J_V>tLB|8m*cY(B`_ix#NEit2(gV^C}v=XQ{lNvR7TuJDvt_stN|f<$;s7b`A&m-He|p87aVX+&u}1Xdf;h|tGU!s+XW8B5;xU9DbeA@ zio3{@?nj<*Kk+8}it)FR!aem#_dR%N9dH3oW2;^h~4v+jo-~R~CaR!#<5$sx^~`zIr9I z1e^D2gKt!w<1)m}L+8U%6eNy?BO!)}E91RJVl*s>5G5wn&Fr^p<7BDp0T&eyt%f{6tm-D1kxL=*gwQY}|v7hvPg#V>I zsBM4fDF-whZkPtQ77Sb6%WdzbJs*bs3=U}tHxPOWhX@DMVs2H}RuT=3!2KSJQWndl uBZc!J($9xn4YjoNP|I--fqI04gnzSG?x31(>G3l9?Tw_fz%JWu?yfJAA>7vh delta 1039 zcmZ8gU5Fe-5bm1oot>STo!i?x@4P$lJPC&N^gQB;C&BX~q69;TCQ;R+gyKfjiamW23$ja!FB#wLlncxn0QDG;%UWzX$7csqwMZ|EdDNw?5B;)85T9jWax zBsjqlErw}=@gx>m=S?2xoP%|9E%CtM@AZ04FBSQ}kv z{td8cF0>XVXUW~R#xXG0km*h653y9kbxBT`#9W%gSKrWQHE zQ##UxqN0dk)!a9A&*`%6`pt?s3!maZiHSNtuJ$9{-5Sd@JDX#9c!xRSNrwNGe1v>g zNz?{`D=o_c`!7qHPp2Ll@>;uvkCVb>hE;}R3`YsVRyWVO1!9uvm9vE|=-+sVSNYYA zYkE7)bb?5aLWKSkm@1X#*$H|sC^@RUa)H9`N}Rux^>S_w^4TEQf@^b(T*ECj-|V%) S=>vgJcf<#$B8E=Of8-w+ZtC*@ diff --git a/src/tasks/__pycache__/douyin.cpython-310.pyc b/src/tasks/__pycache__/douyin.cpython-310.pyc index eb7a7b5647b87ef78407dd3bf00e8d72722f90df..e363497ed0dcc99c2b2118d66c2db9e52a5b3eb3 100644 GIT binary patch delta 890 zcmYLHTWb?h5I%GEWShNavx#Pt8cVCSs1+5(7R48<4+T+cL8+*CIa-aH>UQx`W?O0z zRH#}{5xi6qK|v4{3cmXv`qD@J2a1A%8fV*5cbVB?&dhu}-*>*WPPMs1j$<-jC z1}r^iGkk(JK;k02H=?6nTln*%tm-EuP{-Y68nQQLKWh~ZJ7@Rn%>VW$Zx(%6{o{{zbj)r|lE delta 858 zcmYLGO-NKx6u#%aJ8#~b_d7b~{4|M{n3eq)j3X_xMFeHI5dT`_)o`S-o)4|zJ{7Ep zU_iTzQW=s=Y02k-)h^ZR(r;>Vgyge zmq$}8sa1R1%`1d(2-FoQJwY2;{XPww@*1>2NiM*E#(;$1ko*isI?BbYFlN_;&KrA3 zp!;^!;f*x_QlwlDbj&BFnfFYdq+Jtk4co%WLgOIdK24Fp7Iq=dlRR~g@N^mb1ml@y zyr)Ru+#rGLHwb$f`p8&*lm_vjK{W7#*w^ScRuck|s!cpwgCHRi!kGi_t9(r_Mz{R~ zh2}z1x=L0_`DuAtX^*7BoE%m%&?o1VRv42{m257v0(aMe1Zg0pF2p`2(i@~g!xso- zzZ@<&8U zu@i=d^v=FP$D;B>EU&6SAxUMkkym4&?z*ZRF><{s*ubdyi>c;s#>5|m z{XKCEOtkZ8v)_P_(mVOqNXmXIHKGaCJH+)O@Yn|7Mn&J>!dnuAn<>IAG#kx9{-Qo9 zK$QwbFsyYev_=DMFQ*8t2D3MPCZa+U5gsoq-f%cy&YP2qdc8)+n#Vq=Mg&I472%

!#!bW7LKGngguMpW1&OS1b+v^xH0sFmj z)M|fdQpQf$cJufCQMR1%))kb}9SsZ6^EO!&cbcX?j=i@{Y?THwoQx%{>P> N`QGh`P_k&Me*i87$9w<) diff --git a/src/tasks/bilibili.py b/src/tasks/bilibili.py index be735d0..a57b581 100644 --- a/src/tasks/bilibili.py +++ b/src/tasks/bilibili.py @@ -5,13 +5,17 @@ import json import requests import concurrent.futures from datetime import datetime -from tkinter import messagebox from DrissionPage import ChromiumPage, ChromiumOptions from src.downloader import download_file def run_bilibili_task( - target_url, target_count, save_root, browser_path, log_callback, finish_callback + target_url, + target_count, + save_root, + browser_path, + log_callback, + finish_callback=None, ): """ [Control Layer] B站核心业务流程 @@ -85,7 +89,7 @@ def run_bilibili_task( next_btn.click() no_new_data_count = 0 time.sleep(2) - except: + except Exception: pass else: no_new_data_count = 0 @@ -146,7 +150,7 @@ def run_bilibili_task( if dp: try: dp.close() - except: + except Exception: pass finally: # 这里需要一种机制通知UI线程结束,或者由UI层处理 @@ -218,7 +222,11 @@ def get_bilibili_play_url(bvid): """ url = f"https://www.bilibili.com/video/{bvid}" headers = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "User-Agent": ( + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + "AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/120.0.0.0 Safari/537.36" + ), "Referer": "https://www.bilibili.com/", } try: @@ -242,4 +250,4 @@ def get_bilibili_play_url(bvid): return video_url, audio_url except Exception: pass - return None, None \ No newline at end of file + return None, None diff --git a/src/tasks/douyin.py b/src/tasks/douyin.py index 0b0c892..65ea4c4 100644 --- a/src/tasks/douyin.py +++ b/src/tasks/douyin.py @@ -5,7 +5,15 @@ from datetime import datetime from DrissionPage import ChromiumPage, ChromiumOptions from src.downloader import download_file -def run_douyin_task(target_url, target_count, save_root, browser_path, log_callback, finish_callback): + +def run_douyin_task( + target_url, + target_count, + save_root, + browser_path, + log_callback, + finish_callback, +): """ [Control Layer] 抖音核心业务流程 1. 启动浏览器 @@ -53,7 +61,7 @@ def run_douyin_task(target_url, target_count, save_root, browser_path, log_callb ): collected_works.append(aweme) found_new = True - except: + except Exception: pass log_callback(f"已获取作品信息: {len(collected_works)}/{target_count}") @@ -99,7 +107,11 @@ def run_douyin_task(target_url, target_count, save_root, browser_path, log_callb file_name_base = f"{date_str}({count_idx})" download_tasks.append( - {"work": work, "index": index, "file_name_base": file_name_base} + { + "work": work, + "index": index, + "file_name_base": file_name_base, + } ) # 使用线程池执行下载 @@ -115,7 +127,7 @@ def run_douyin_task(target_url, target_count, save_root, browser_path, log_callb len(works_to_process), save_root, task["file_name_base"], - log_callback + log_callback, ) ) @@ -133,12 +145,15 @@ def run_douyin_task(target_url, target_count, save_root, browser_path, log_callb if dp: try: dp.close() - except: + except Exception: pass finally: pass -def process_douyin_work(work, index, total_count, save_root, file_name_base, log_callback): + +def process_douyin_work( + work, index, total_count, save_root, file_name_base, log_callback +): """ [Data Layer] 单个任务处理逻辑 (Worker) 判断作品类型(视频/图文),生成路径并调用下载器 @@ -148,9 +163,11 @@ def process_douyin_work(work, index, total_count, save_root, file_name_base, log if "images" in work and work["images"]: is_video = False - log_callback( - f"[{index + 1}/{total_count}] {file_name_base} | {'视频' if is_video else '图文'} | 下载中..." + msg = ( + f"[{index + 1}/{total_count}] {file_name_base} | " + f"{'视频' if is_video else '图文'} | 下载中..." ) + log_callback(msg) if is_video: video_url = work["video"]["play_addr"]["url_list"][0] @@ -158,7 +175,7 @@ def process_douyin_work(work, index, total_count, save_root, file_name_base, log if not os.path.exists(file_path): if download_file(video_url, file_path, log_callback=log_callback): log_callback( - f"[{index + 1}/{total_count}] {file_name_base} -> 下载完成" + f"[{index + 1}/{total_count}] {file_name_base} " "-> 下载完成" ) else: log_callback( @@ -166,7 +183,8 @@ def process_douyin_work(work, index, total_count, save_root, file_name_base, log ) else: log_callback( - f"[{index + 1}/{total_count}] {file_name_base} -> 文件已存在,跳过" + f"[{index + 1}/{total_count}] {file_name_base} " + "-> 文件已存在,跳过" ) else: img_folder = os.path.join(save_root, file_name_base) @@ -185,4 +203,4 @@ def process_douyin_work(work, index, total_count, save_root, file_name_base, log ) except Exception as e: - log_callback(f"[{index + 1}/{total_count}] {file_name_base} -> 处理出错: {e}") \ No newline at end of file + log_callback(f"[{index + 1}/{total_count}] {file_name_base} -> 处理出错: {e}") diff --git a/src/ui/__pycache__/app.cpython-310.pyc b/src/ui/__pycache__/app.cpython-310.pyc index f8d649bb8f615ef20cf1561950def4eae2d177ec..d58e2642bf9b76db9d6effa0f96bfab76601bffa 100644 GIT binary patch delta 199 zcmdmEcEpS~pO=@50SLBy>dLI!$Xm?ASU0(m$6Jbtk%^H7h}r(|v9T~A^ETh&@n>Y5 zzgdfqiIH*HWL^FnjB7Wu34}5-Zk`+?7{X|^d842fBR6-7P%m>WTMgR+$<42Xb~8#c z-(o9CEJ{x;xy1scilf+45>s>Y^E9OqRw+#0C?T?0 oL2N1`BirO{;+q)XY|fNmVPxc*oF|#b$T|70s(Yf4W(CbEbliY+BEH8($Ra)xLu