跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 爬虫实战:批量抓取应用商店分类应用

介绍使用 Python 批量抓取应用商店分类数据的实战方案。涵盖环境搭建(requests、BeautifulSoup4、pandas)、反爬策略(User-Agent、请求间隔)、页面解析(CSS 选择器)及数据存储(Excel)。提供基础代码封装、批量爬取逻辑及常见问题解决方案,强调合规性与伦理规范,适用于竞品调研与行业分析场景。

BigDataPan发布于 2026/3/24更新于 2026/9/460 浏览

在移动互联网数据分析、竞品调研、行业报告制作等场景中,应用商店的 APP 分类数据是核心数据源之一。无论是分析某一赛道的应用分布,还是监控同类 APP 的核心指标,通过 Python 爬虫批量抓取应用商店分类应用数据,都是高效且低成本的解决方案。本文将以主流安卓应用商店为例,从环境搭建、爬虫设计、数据解析到存储落地,完整讲解如何实现应用商店分类应用的批量爬取。

一、爬虫开发前期准备

1.1 技术选型与环境搭建

本次实战选用 Python 作为开发语言,核心依赖以下库:

  • requests:发送 HTTP 请求获取网页 / 接口数据;
  • BeautifulSoup4:解析 HTML 页面提取目标数据;
  • pandas:数据清洗与 Excel 存储;
  • fake-useragent:生成随机 User-Agent,规避基础反爬;
  • time:设置请求间隔,降低服务器压力。
1.2 目标分析与反爬注意事项

本文以某公开安卓应用商店「工具类」分类为例(实际可替换为任意分类),核心抓取字段包括:APP 名称、下载量、评分、简介、所属分类。

爬取前需注意:

  1. 遵守网站 robots.txt 协议,避免高频请求;
  2. 仅用于学习研究,勿将数据用于商业用途;
  3. 加入随机请求间隔、随机 User-Agent,模拟正常用户访问;
  4. 若遇到验证码、IP 封禁,及时停止爬取,切勿对抗。

二、核心代码实现

2.1 基础配置与请求函数封装

首先封装请求函数,实现「发送请求 - 获取响应 - 异常处理」的基础逻辑,同时加入反爬策略:

import requests 
from fake_useragent import UserAgent 
from bs4 import BeautifulSoup 
import pandas as pd 
import time 
import random 

# 初始化 UserAgent 生成器
ua = UserAgent()

def get_html(url, timeout=10):
    """
    发送 GET 请求获取页面 HTML
    :param url: 目标 URL
    :param timeout: 请求超时时间
    :return: 页面 HTML 文本/None
    """
    headers = {
        "User-Agent": ua.random, # 随机 User-Agent
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
        "Referer": "https://www.baidu.com/" # 模拟来路
    }
    try:
        # 随机延迟 1-3 秒,避免高频请求
        time.sleep(random.uniform(1, 3))
        response = requests.get(url, headers=headers, timeout=timeout)
        response.raise_for_status() # 抛出 HTTP 状态码异常
        response.encoding = response.apparent_encoding # 自动识别编码
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"请求失败:{url},错误信息:{e}")
        return None
2.2 解析页面提取分类应用数据

接下来编写解析函数,从页面 HTML 中提取目标字段。以某应用商店分类页为例(URL 格式为 https://xxx.com/category/tool?p={page},page 为页码),通过 BeautifulSoup 定位元素:

def parse_app_list(html):
    """
    解析应用商店分类页,提取 APP 数据
    :param html: 页面 HTML 文本
    :return: 解析后的 APP 数据列表
    """
    app_list = []
    if not html:
        return app_list
    soup = BeautifulSoup(html, "html.parser") # 定位 APP 列表项(需根据实际页面结构调整 CSS 选择器)
    app_items = soup.select("div.app-item")
    for item in app_items:
        try:
            # 提取核心字段(需根据实际页面标签调整)
            app_name = item.select_one("h3.app-name").get_text(strip=True) if item.select_one("h3.app-name") else "未知"
            download_count = item.select_one("span.download-num").get_text(strip=True) if item.select_one("span.download-num") else "0"
            score = item.select_one("span.score").get_text(strip=True) if item.select_one("span.score") else "0"
            intro = item.select_one("p.app-intro").get_text(strip=True) if item.select_one("p.app-intro") else "无简介"
            category = item.select_one("span.category").get_text(strip=True) if item.select_one("span.category") else "工具类"
            
            # 构造字典存储单条 APP 数据
            app_info = {
                "APP 名称": app_name,
                "下载量": download_count,
                "评分": score,
                "简介": intro,
                "所属分类": category
            }
            app_list.append(app_info)
        except Exception as e:
            print(f"解析单条 APP 数据失败,错误信息:{e}")
            continue
    return app_list
2.3 批量爬取与数据存储

编写主函数,实现多页数据批量爬取,并将结果存储为 Excel 文件:

def batch_crawl(category_url, start_page=1, end_page=5):
    """
    批量爬取指定分类的多页应用数据
    :param category_url: 分类页基础 URL(需包含{p}占位符)
    :param start_page: 起始页码
    :param end_page: 结束页码
    :return: 所有爬取的 APP 数据列表
    """
    all_app_data = []
    for page in range(start_page, end_page + 1):
        # 拼接当前页 URL
        current_url = category_url.format(p=page)
        print(f"正在爬取第{page}页:{current_url}")
        
        # 获取页面 HTML 并解析
        html = get_html(current_url)
        app_data = parse_app_list(html)
        if app_data:
            all_app_data.extend(app_data)
            print(f"第{page}页爬取完成,共{len(app_data)}条数据")
        else:
            print(f"第{page}页无数据,停止爬取")
            break # 无数据则终止后续页码爬取
    return all_app_data

if __name__ == "__main__":
    # 替换为实际的应用商店分类页 URL(需包含{p}占位符)
    # 示例:https://xxx.com/category/tool?p={p}
    CATEGORY_URL = "https://your-target-url.com/category/tool?p={p}"
    
    # 爬取 1-5 页数据
    app_data = batch_crawl(CATEGORY_URL, start_page=1, end_page=5)
    if app_data:
        # 将数据转换为 DataFrame 并存储为 Excel
        df = pd.DataFrame(app_data)
        # 去重(避免重复爬取)
        df = df.drop_duplicates(subset=["APP 名称"], keep="first")
        # 保存到本地
        df.to_excel("应用商店工具类 APP 数据.xlsx", index=False, encoding="utf-8")
        print(f"爬取完成!共获取{len(df)}条有效数据,已保存至「应用商店工具类 APP 数据.xlsx」")
    else:
        print("未爬取到任何数据,请检查 URL 或页面结构")

三、代码适配与优化

3.1 页面结构适配说明

上述代码中的 CSS 选择器(如 div.app-item、h3.app-name)是通用示例,实际使用时需根据目标应用商店的页面结构调整:

  1. 打开目标应用商店分类页,按 F12 打开开发者工具;
  2. 定位 APP 列表项的外层标签,替换 app_items = soup.select("div.app-item") 中的选择器;
  3. 依次定位 APP 名称、下载量等字段的标签,修改解析函数中的选择器。
3.2 进阶优化策略
  1. 异步爬取:使用 aiohttp 替代 requests,实现异步请求,提升爬取效率(适合大量页码);
  2. IP 代理池:若遇到 IP 封禁,可接入代理池,在请求时添加 proxies 参数;
  3. 断点续爬:将已爬取的页码和数据实时保存,避免程序中断后重新爬取;
  4. 数据校验:添加字段格式校验(如评分需为 0-5 的数值),提升数据质量。

四、常见问题与解决方案

  1. 页面解析为空:检查 CSS 选择器是否匹配目标页面,或目标页面是否为动态加载(若为动态加载,需使用 Selenium 或 Playwright 渲染页面);
  2. 请求被拒绝:增加请求间隔、更换 User-Agent,或检查是否被网站拉黑 IP;
  3. Excel 中文乱码:确保 to_excel 时指定 encoding="utf-8",或使用 openpyxl 引擎:df.to_excel("xxx.xlsx", index=False, engine="openpyxl");
  4. 数据重复:通过 drop_duplicates 去重,或爬取前记录已爬取的 APP 名称。

五、合规与伦理说明

  1. 爬取数据前需确认目标网站的用户协议,禁止爬取非公开数据;
  2. 控制爬取频率,避免给目标服务器造成压力;
  3. 爬取的数据仅用于学习、研究,禁止用于商业售卖或恶意分析;
  4. 若网站明确禁止爬虫,需立即停止操作。

目录

  1. 一、爬虫开发前期准备
  2. 1.1 技术选型与环境搭建
  3. 1.2 目标分析与反爬注意事项
  4. 二、核心代码实现
  5. 2.1 基础配置与请求函数封装
  6. 初始化 UserAgent 生成器
  7. 2.2 解析页面提取分类应用数据
  8. 2.3 批量爬取与数据存储
  9. 三、代码适配与优化
  10. 3.1 页面结构适配说明
  11. 3.2 进阶优化策略
  12. 四、常见问题与解决方案
  13. 五、合规与伦理说明

更多推荐文章

查看全部
  • C++ 继承:面向对象代码复用的核心机制
  • Stable Diffusion v1.5 故障艺术与赛博朋克融合效果生成指南
  • 20 个 Python 自动化脚本实战:文件管理与办公效率提升
  • C++ 实现红黑树:深入理解 STL map 底层原理
  • OpenAI 与 LangChain 集成实战指南
  • 基于 YOLOv10 的无人机目标检测系统
  • Windows 11 安装配置 Java JDK 11 环境
  • C++ 入门实战指南:从环境搭建到面向对象编程
  • MaaS 平台与阿里 QWQ 技术:AI 调参实战指南
  • OpenClaw 安全 AI 助理搭建指南:部署方案与 API 接入实战
  • 基于YOLOv8/v11与LLM的Web目标检测及人脸表情识别系统
  • Stable Diffusion 2024:技术突破与商业落地的开源实践
  • GitHub Spec-Kit 上手与规范驱动开发实践
  • MCP Server 实现 Excel 表格一键生成可视化图表 HTML 报告
  • Kubernetes: 使用 kubectl 插件 ketall 查看所有 API 对象资源
  • FunASR 离线语音转写服务部署与客户端开发实战
  • 基于开源鸿蒙 OpenHarmony 的智能家居综合应用系统
  • Win10 系统禁用 Microsoft 365 Copilot 弹窗的 6 种方法
  • Linux 线程控制与 pthread 基础
  • 前端实现液态玻璃效果

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online