将这个文件下载到Python脚本相同的目录下
https://v2.windows93.net/files.json?v=2.4.9
#!/usr/bin/env python3import osimport jsonimport requestsfrom urllib.parse import urljoinfrom pathlib import Pathimport sysimport time
# 配置参数BASE_URL = "https://v2.windows93.net/"SAVE_DIR = Path("/vol1/1000/Home/w93")JSON_FILE = "files.json"
def load_json(): """加载JSON文件""" try: with open(JSON_FILE, 'r', encoding='utf-8') as f: return json.load(f) except FileNotFoundError: print(f"错误: 找不到文件 {JSON_FILE}") sys.exit(1) except json.JSONDecodeError as e: print(f"错误: JSON解析失败 - {e}") sys.exit(1)
def create_directories(data, base_path="", current_path=""): """递归创建目录结构""" if isinstance(data, dict): for key, value in data.items(): # 如果是文件(值为0),跳过目录创建 if value == 0: continue new_path = os.path.join(current_path, key) full_path = SAVE_DIR / base_path / new_path # 创建目录 try: full_path.mkdir(parents=True, exist_ok=True) print(f"创建目录: {full_path}") except Exception as e: print(f"创建目录失败 {full_path}: {e}") # 递归处理子目录 create_directories(value, base_path, new_path)
def download_files(data, base_path="", current_path=""): """递归下载文件""" if isinstance(data, dict): for key, value in data.items(): # 如果是文件(值为0) if value == 0: # 构建文件路径 file_relative_path = os.path.join(current_path, key) file_local_path = SAVE_DIR / base_path / file_relative_path # 检查文件是否已存在 if file_local_path.exists(): file_size = file_local_path.stat().st_size size_str = f"{file_size/1024:.1f}KB" if file_size < 1024*1024 else f"{file_size/(1024*1024):1f}MB" print(f"文件已存在,跳过: {file_local_path} ({size_str})") continue # 构建下载URL(需要加上基础路径前缀,如"c/"或"a/") file_url = urljoin(BASE_URL, os.path.join(base_path, file_relative_path)) # 确保父目录存在 file_local_path.parent.mkdir(parents=True, exist_ok=True) # 下载文件 try: print(f"下载: {file_url}") response = requests.get(file_url, stream=True, timeout=30) response.raise_for_status() # 获取文件大小信息 file_size = int(response.headers.get('content-length', 0)) # 保存文件 downloaded_size = 0 with open(file_local_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) downloaded_size += len(chunk) # 显示文件大小 size_str = f"{file_size/1024:.1f}KB" if file_size < 1024*1024 else f"{file_size/(1024*1024):.1f}MB" print(f" 保存到: {file_local_path} ({size_str})") # 添加短暂延迟,避免对服务器造成过大压力 # time.sleep(0.01) except requests.RequestException as e: print(f" 下载失败 {file_url}: {e}") except Exception as e: print(f" 保存失败 {file_local_path}: {e}") # 递归处理子目录 else: new_path = os.path.join(current_path, key) download_files(value, base_path, new_path)
def main(): print("=" * 60) print("Windows93 文件下载脚本") print(f"源URL: {BASE_URL}") print(f"目标目录: {SAVE_DIR}") print("=" * 60) # 确保保存目录存在 SAVE_DIR.mkdir(parents=True, exist_ok=True) print(f"创建目标目录: {SAVE_DIR}") # 加载JSON数据 print(f"\n加载JSON文件: {JSON_FILE}") data = load_json() # 处理每个顶级目录 for top_dir in data: print(f"\n处理目录: '{top_dir}'") # 获取该目录的数据 dir_data = data[top_dir] # 创建目录结构 print(f"创建 '{top_dir}' 目录结构...") create_directories(dir_data, top_dir) # 下载文件 print(f"下载 '{top_dir}' 文件...") download_files(dir_data, top_dir) print("\n" + "=" * 60) print("下载完成!") print("=" * 60)
if __name__ == "__main__": main()
上一篇:[易语言]虚拟机检测
下一篇:没有了
本站为个人博客,博客所发布的一切破解软件、补丁、注册机和注册信息及软件的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站所有内容均来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容,如有需要,请去软件官网下载正版。
访问和下载本站内容,说明您已同意上述条款。
本站为非盈利性站点,不贩卖软件,不会收取任何费用,所有内容不作为商业行为。