Python脚本爬虫App抓包如何配置

wen 实用脚本 1

Python脚本爬虫App抓包配置全攻略:从零搭建移动端数据采集环境

目录导读

  1. 核心概念与准备 – 什么是App抓包?为什么需要配置?
  2. 抓包工具选择与安装 – Charles/mitmproxy/Fiddler哪家强?
  3. HTTPS证书配置 – 避免加密流量“白抓”的关键步骤
  4. Python脚本集成 – 如何让爬虫自动接管抓包数据
  5. 模拟器与真机配置 – Android/iOS双平台实战
  6. 常见问题与问答 – 证书不信任、流量缺失、性能优化
  7. 实战案例 – 抓取某购物App商品列表的完整流程

核心概念与准备

Q:为什么爬虫需要抓包?
App的数据通常通过HTTP/HTTPS协议传输,但开发者常采用加密、签名或反爬机制,抓包能让你像调试工具一样“看见”App发送的每个请求参数、Header和响应数据,从而逆向构造爬虫逻辑。

Python脚本爬虫App抓包如何配置

核心三要素

  • 代理服务器:充当客户端与服务器的中间人(如Charles监听8888端口)
  • SSL解包:安装自签名证书,解密HTTPS流量(否则只能看到密文)
  • 流量重定向:让App的请求强制经过你的代理

必备条件

  • 一台电脑(Mac/Win/Linux均可)
  • 一部手机或模拟器(Android/iOS)
  • 同一局域网(手机代理指向电脑IP)

抓包工具选择与安装

工具 优势 适用场景 下载命令
mitmproxy 纯Python生态,完美配合代码 自动化深度定制 pip install mitmproxy
Charles 图形化界面易上手 快速分析+手动调试 官网下载(30天试用)
Fiddler Windows友好,脚本扩展丰富 遗留系统兼容 官网免费版

推荐组合

  • 初学者用Charles观察流量结构
  • 进阶直接用mitmproxy-python脚本实现全自动抓取(如mitmdump -s script.py

HTTPS证书配置(最易踩坑环节)

1 电脑端证书安装

以mitmproxy为例:

# 启动mitmproxy
mitmproxy -p 8888
# 浏览器访问 mitm.it 下载对应系统证书
# Windows双击安装 → 选择“受信任的根证书颁发机构”

2 Android设备证书配置

注意:Android 7+ 默认不信任用户证书,需root或adb安装

  • 非root方法:使用Magisk模块“Move Certificates”
  • 快速方案:用低版本Android模拟器(如Android 6)跳过证书锁定
  • 实测可靠:在开发者选项→证书安装导入mitmproxy生成的.pem文件

3 iOS证书配置

  • Safari访问mitm.it→安装描述文件→通用→关于本机→证书信任设置→启用

Q:安装了证书为何还是抓不到HTTPS?
检查:1) 是否安装了电脑端/手机端双证书 2) App是否使用了SSL Pinning(需额外Hook技术,如Xposed+JustTrustMe)


Python脚本集成(让爬虫自动接管数据)

1 mitmproxy脚本基础架构

# demo.py
from mitmproxy import http
def request(flow: http.HTTPFlow):
    # 拦截所有请求
    if "api.example.com" in flow.request.pretty_host:
        print(f"捕获请求: {flow.request.url}")
        # 可修改请求头、添加参数
def response(flow: http.HTTPFlow):
    # 解析响应JSON
    if "product_list" in flow.request.path:
        data = flow.response.get_text()
        # 保存到本地或直接入库
        with open("products.json", "a") as f:
            f.write(data + "\n")

运行:mitmdump -s demo.py -p 8888

2 多线程与性能优化

from mitmproxy import ctx
import threading
class Crawler:
    def __init__(self):
        self.lock = threading.Lock()
        self.counter = 0
    def response(self, flow):
        with self.lock:
            self.counter += 1
            if self.counter % 100 == 0:
                ctx.log.info(f"已处理{self.counter}条数据")

3 实战:自动翻页抓取

许多App的分页参数藏在请求体中,脚本需动态解析:

def request(flow):
    if "/page" in flow.request.url:
        # 提取已抓取页码,自动增加
        curr_page = int(flow.request.query["page"])
        flow.request.query["page"] = str(curr_page + 1)

模拟器与真机配置双平台

Android模拟器(推荐夜神/雷电)

  1. 设置代理:WLAN长按→修改网络→手动代理→输入电脑IP+端口8888
  2. 安装证书:浏览器访问mitm.it下载→设置→安全→从SD卡安装
  3. 验证:访问httpbin.org/get应返回代理服务器信息

iOS真机配置(非越狱)

  • 设置→无线局域网→当前网络→HTTP代理→手动
  • 注意:iOS 14+需在Safari输入mitm.it后手动在“设置→通用→VPN与设备管理”安装

Q:真机抓包速度极慢怎么办?
可能是CPU解码导致的瓶颈,建议:

  • 关闭不必要的流量拦截(如图片、视频)
  • 使用--set block_global=false参数避免捕获非目标域名

常见问题与问答

Q1:抓包时App提示“网络异常”或“SSL错误”
→ 原因:证书未正确安装,或App内置了SSL Pinning。
→ 解决:尝试使用Riru-justtrustme(Magisk模块)或Frida脚本绕过。

Q2:每次启动都要手动配置代理太麻烦?
→ 方案:用ADB命令自动设置模拟器代理:

adb shell settings put global http_proxy 192.168.1.100:8888

Q3:Python爬虫抓包后如何解决签名验证?
→ 逆向分析App的签名算法(通常为MD5+盐值),在Python中复现:

import hashlib
sign = hashlib.md5((params + secret_key).encode()).hexdigest()

Q4:抓包数据乱码或格式混乱
→ 检查响应编码:flow.response.encoding = 'utf-8'或使用zlib.decompress()解压。


实战案例:抓取某电商App商品列表

目标:通过移动端接口获取首页推荐商品(免登录)
步骤

  1. 启动mitmdump并加载脚本:mitmdump -s shop.py
  2. 模拟器打开App,观察终端输出
  3. 发现关键接口:https://api.xxx.com/v2/homepage/recommend(Headers含x-auth: token
  4. 在脚本中添加:从响应中解析code=200时的data.items,并保存为CSV
  5. 循环翻页:修改请求体中的page字段(需先逆向找出翻页逻辑)

最终脚本片段

def response(flow):
    if "recommend" in flow.request.url:
        json_data = json.loads(flow.response.get_text())
        if json_data["code"] == 200:
            for item in json_data["data"]["items"]:
                writer.writerow([item["id"], item["title"], item["price"]])

配置Python爬虫App抓包的核心在于三步:工具选型→证书渗透→脚本自动化,其中证书安装的坑最多(尤其Android),而mitmproxy的Python接口能让你完全掌控流量,抓包只是桥梁,真正的价值在于从海量请求中提取出稳定的数据管道,建议先在模拟器上验证流程,再迁移到真机环境,同时准备好处理签名校验、限频等反爬手段。

抱歉,评论功能暂时关闭!