怎么用Python脚本批量下载应用商店的App安装包
本文介绍如何在Windows环境下使用Python标准库编写脚本,从F-Droid等提供直接APK下载链接的公开仓库批量获取应用安装包。通过CSV清单管理下载任务,实现自动化保存、断点跳过及错误报告,并强调SHA-256哈希校验与来源可信度验证的重要性,适用于测试环境准备或离线部署场景。
为测试设备预装一批应用时,逐个在网页上点击“下载”不仅效率低下,还容易漏掉某个版本或架构。如果应用仓库提供直接的 APK 下载链接,Python 可以读取一份整理好的清单,依次请求并保存文件,同时把失败的项目单独打印出来,让人工介入处理。
这种方法的核心前提是“直接下载地址”。它适用于像 F-Droid 这样提供公开 APK 文件的仓库,而不能把任意应用商店的详情页面当成下载源。Google Play 等平台通常依据设备动态生成拆分 APK,iOS 应用更是完全不同的体系。涉及登录、付费或版权限制的内容,必须使用平台许可的官方方式,脚本仅用于处理公开且允许下载的静态资源。

示意图:从公开应用仓库整理清单并下载 APK
一、准备环境与下载清单
在 Windows 电脑上安装 Python 3 后,打开 PowerShell 输入 python --version 确认环境可用。如果系统配置了 Python 启动器,也可以将命令中的 python 替换为 py。本例仅使用 Python 标准库,无需安装任何第三方包,降低了环境配置的复杂度。
在工作文件夹中新建一个名为 packages.csv 的文件,第一行表头设为 filename,url。随后访问 F-Droid 等仓库的应用详情页,进入版本区域,确认目标设备的 Android 版本和 CPU 架构(如 arm64-v8a)与所选 APK 匹配。复制该版本“Download APK”按钮对应的实际下载链接,填入 url 列;在 filename 列填写易于识别的英文文件名,例如 app-one.apk。
每行对应一个下载任务,文件名必须互不重复,且后缀应为 .apk。切勿将应用详情页面的 URL 当作下载链接,也不要随意编造文件名。如果使用 Excel 等表格软件编辑,保存时务必选择 UTF-8 编码的 CSV 格式;若链接中包含逗号,需按 CSV 规范用双引号包裹整个字段。在复制前,请再次确认来源的使用许可,因为仓库中的版本可能会更新,清单也应随之复核。
二、编写并运行批量下载脚本
在同一文件夹中新建 download_apks.py 文件,粘贴以下代码。该脚本会逐行读取 CSV 文件,设置超时时间,并将数据先写入临时文件(.part),只有当完整读取结束后才重命名为目标文件名。如果某一项下载失败,脚本会报告原因并继续处理下一项,避免因为单个错误中断整个流程。

示意图:Python 按清单逐项下载并保存
import csv
import re
from pathlib import Path
from urllib.parse import urlparse
from urllib.request import Request, urlopen
output = Path("downloads")
output.mkdir(exist_ok=True)
with open("packages.csv", encoding="utf-8-sig", newline="") as f:
for row in csv.DictReader(f):
name = (row.get("filename") or "").strip()
url = (row.get("url") or "").strip()
if not re.fullmatch(r"[A-Za-z0-9_-]+\.apk", name, re.I):
print("跳过:文件名无效", name)
continue
if urlparse(url).scheme.lower() != "https":
print("跳过:需要 HTTPS 地址", name)
continue
target = output / name
part = output / (name + ".part")
if target.exists():
print("已存在,跳过", name)
continue
try:
request = Request(url, headers={"User-Agent": "Python APK downloader"})
with urlopen(request, timeout=60) as response:
if urlparse(response.geturl()).scheme.lower() != "https":
raise ValueError("重定向后不是 HTTPS")
with part.open("wb") as out:
while True:
chunk = response.read(1024 * 1024)
if not chunk:
break
out.write(chunk)
part.replace(target)
print("已保存", name)
except Exception as exc:
part.unlink(missing_ok=True)
print("下载失败", name, exc)
在该文件夹下打开 PowerShell,运行 python download_apks.py。脚本会自动创建 downloads 文件夹存放结果,并跳过已存在的同名文件。检查控制台输出,针对标记为“下载失败”的项目,需检查地址是否正确、网络是否通畅以及仓库状态是否正常。注意,代码中的 missing_ok 参数需要 Python 3.8 或更高版本支持。
脚本采用顺序下载模式,不支持断点续传。如果需要下载大量文件,应遵守仓库的访问规则,避免无节制地增加并发请求导致 IP 被封禁。如果运行后得到的文件无法安装,通常需要重新检查复制的是否为直接下载链接,因为服务器有时可能返回错误页面而非二进制数据。“已保存”仅说明读取过程结束,并不证明文件一定是有效或可信的 APK。
三、核对完整性与安装风险
下载完成后,安全性校验不可或缺。先从可信渠道获取与具体文件对应的 SHA-256 哈希值,然后在 PowerShell 中运行 Get-FileHash .\downloads\app-one.apk -Algorithm SHA256,将计算结果与可信来源提供的值逐位比较。如果没有可信的预期值,单独计算哈希并不能证明文件安全;切勿将 APK 的签名证书指纹误认为是文件哈希。

示意图:校对文件摘要并检查签名
除了哈希校验,还需核对应用名称、版本号、CPU 架构和最低 Android 版本要求。选择了与设备不兼容的安装包可能导致安装失败。值得注意的是,手动下载 APK 意味着用户需自行关注更新,F-Droid 等仓库的直接下载方式不会推送更新通知,官方通常建议通过其客户端进行安装和管理。
对于来源不明、签名异常或校验不一致的文件,坚决不要安装。建议将可靠来源、清单文件和校验结果保留在一起,后续复用时先确认版本仍然有效。脚本的价值在于解决重复下载的体力劳动,而版本选择和来源判断的责任,始终由使用者承担。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













