首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用 Python 自动化爬取并下载 APK 文件:以游戏巴士为例

使用 Python 自动化爬取并下载 APK 文件:以游戏巴士为例

原创
作者头像
用户2695996
发布2026-02-12 14:55:17
发布2026-02-12 14:55:17
290
举报
文章被收录于专栏:源码搭建源码搭建

在移动应用开发、安全测试或批量部署场景中,我们常常需要从第三方安卓应用市场批量获取 APK 安装包。本文将演示如何使用 Python 编写一个轻量级爬虫,自动从类似“游戏巴士”这样的免费软件下载站提取 APK 下载链接,并完成自动化下载保存。

注意:本文仅用于技术学习与合法用途,请遵守目标网站的 robots.txt 协议及法律法规,切勿用于商业盗版或侵犯知识产权行为。

该站提供大量免费安卓应用的 APK 直链下载。每个软件详情页(如/download/xxx.html)通常包含一个或多个下载按钮,其中“普通下载”链接往往指向真实的 APK 文件 URL。

  • requests:发送 HTTP 请求
  • BeautifulSoup:解析 HTML 提取链接
  • urllib.parse:处理 URL
  • os / pathlib:管理本地文件路径
代码语言:txt
复制
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
import time

# 配置项
BASE_URL = "https://www.youxibashi.cn/"
DOWNLOAD_DIR = "apks"
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36"
}

# 创建下载目录
os.makedirs(DOWNLOAD_DIR, exist_ok=True)

def extract_apk_link(page_url):
    """
    从游戏巴士的软件详情页提取 APK 下载链接
    示例页面:
      - https://www.youxibashi.cn/download/9727.html (乐学喵)
      - https://www.youxibashi.cn/download/3082.html (奥北体能)
      - https://www.youxibashi.cn/download/654.html  (护眼大师)
    """
    try:
        resp = requests.get(page_url, headers=HEADERS, timeout=10)
        resp.raise_for_status()
        soup = BeautifulSoup(resp.text, 'html.parser')

        # 查找包含 "APK下载" 的 <a> 标签(普通下载)
        download_link = soup.find('a', string=lambda text: text and 'APK下载' in text)
        if download_link and download_link.get('href'):
            apk_url = urljoin(BASE_URL, download_link['href'])
            return apk_url
        else:
            print(f"[!] 未在 {page_url} 找到 APK 下载链接")
            return None
    except Exception as e:
        print(f"[ERROR] 解析 {page_url} 失败: {e}")
        return None

def download_apk(apk_url, save_dir):
    """下载 APK 并保存"""
    try:
        resp = requests.get(apk_url, headers=HEADERS, stream=True, timeout=30)
        resp.raise_for_status()

        # 从 URL 中提取文件名
        filename = os.path.basename(urlparse(apk_url).path)
        if not filename.endswith('.apk'):
            filename += '.apk'

        filepath = os.path.join(save_dir, filename)
        with open(filepath, 'wb') as f:
            for chunk in resp.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f"[✓] 已保存: {filepath}")
    except Exception as e:
        print(f"[ERROR] 下载失败 {apk_url}: {e}")

def main():
    # 待爬取的软件详情页列表(可扩展)
    target_pages = [
        "https://www.youxibashi.cn/download/9727.html",  # 乐学喵 - MBA备考平台
        "https://www.youxibashi.cn/download/3082.html",  # 奥北体能 - 校园体测助手
        "https://www.youxibashi.cn/download/654.html",   # 护眼大师 - 蓝光过滤工具
    ]

    for page in target_pages:
        print(f"\n[+] 正在处理: {page}")
        apk_link = extract_apk_link(page)
        if apk_link:
            print(f"  → 发现 APK 链接: {apk_link}")
            download_apk(apk_link, DOWNLOAD_DIR)
        else:
            print("  → 跳过")
        time.sleep(1)  # 礼貌性延迟

    print(f"\n[INFO] 所有任务完成!APK 保存至: ./{DOWNLOAD_DIR}/")

if __name__ == "__main__":
    main()
  1. 安装依赖: pip install requests beautifulsoup4
  2. 运行脚本: python apk_downloader.py
  3. 下载的 APK 将保存在 ./apks/ 目录下。
  • 反爬机制:部分站点可能启用 Cloudflare 或动态加载,需结合 Selenium。
  • 链接时效性:APK 直链可能带有时效参数(如 token),建议及时下载。
  • 合法性:仅限个人学习使用,请勿分发或用于非法用途。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档