爬虫高级应用(15. 基于Charles抓包软件抓取手机APP数据)

本文详细介绍了如何通过Charles抓取手机App数据,包括配置安装、证书设置、手机代理及实战使用爱吾游戏宝盒数据的教程。重点演示了如何设置代理、编辑请求和利用Python爬虫获取并解析数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

移动App多使用异步的方式从服务端获取数据,抓取数据之前,要先分析移动App用于获取数据的URL,然后才可以使用requests等网络库去抓取

本章的主要内容:
    1、抓取App数据的原理
    2、Charles和mitmproxy
    3、在PC上安装整数,以及移动端安装和信任整数
    4、在手机端设置代理
    5、监听HTTP/HTTPS数据
    6、编辑请求信息
    7、mitmweb的基本使用方法
    8、如何结合mitmdump与mitmweb编写实时Python爬虫

配置安装Charles

安装Charles

链接: Charles官方下载网址.
在这里插入图片描述
博主安装的是Windows版本

下载相关证书

电脑证书:

安装Charles后,进行如下操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

手机证书:

设置代理
  1. 设置SSL代理设置
    在这里插入图片描述
    在这里插入图片描述
  2. 设置与手机的代理

在这里插入图片描述
在这里插入图片描述
下面为OPPO手机设置代理方式:

1. 手机连上电脑的wifi

在这里插入图片描述

2. 使用cmd->ipconfig获取电脑的ip地址

在这里插入图片描述

3.设置手机的代理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置成功后,进入浏览器等待一下,会出现如下的选项对话框,点击Allow即可
在这里插入图片描述
此时代理设置成功,但是主要任务还没有做,前面都是必要的手续
在浏览器输入chls.pro/ssl
即可下载Charles所需的证书
设置为信任即可
在这里插入图片描述
到此为止,电脑、手机证书和代理都完毕。

实操案例:抓取手机APP爱吾游戏宝盒数据

首先,清空其中的条目,因为Charles不仅再抓取手机的包,还在抓取电脑的包,电脑暂时不要访问页面或者打开应用,否则会弹出别的条目干扰。
在这里插入图片描述
此时我的手机打开了爱吾游戏宝盒,就弹出了好多条目,只需要找到哪一个条目中的数据是你需要的,保存url调用requests库请求url即可,接下来就是解析的工作等等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确定了内容是需要抓取的后,开始编写python爬虫
在这里插入图片描述
需要把上面response返回的Contents作为data加入编码中

import requests
# data从request的Text中获取
data = '''Serial=ffffffff-d2d2-eaad-ffff-ffffef05ac4a&VersionCode=2309&UserId=8224CBEB9F5FF772&isLogin=1&Page=1&TagName=
%E8%A7%92%E8%89%B2&TagId=1&Style=0&Time=1644220741&Sign=3b94ec9cd4b81ff5d76c2acb00c649e8'''
headers = {
    'accept-language':'zh-CN,zh;q=0.8',
    'user-agent':'okhttp-okgo/jeasonlzy',
    'content-type':'application/x-www-form-urlencoded',
    'Host':'service.25game.com'
}
# 抓取角色游戏信息--失败
# 无法解析:实时获取的数据
response = requests.post('https://service.25game.com/v2/App/AppList.aspx',headers=headers,data=data)
print(response.text)
# 抓取用户信息(成功)
data = '''Serial=ffffffff-d2d2-eaad-ffff-ffffef05ac4a&VersionCode=2309&UserId=8224CBEB9F5FF772&isLogin=1&Time=1644220737&Sign=127929932b6de290fe6ac0585bcfd054'''
response = requests.post('https://service.25game.com/v2/User/UserInfo.aspx',headers=headers,data=data)
print(response.text)
# 抓取移植游戏列表(成功)
data = '''Serial=ffffffff-d2d2-eaad-ffff-ffffef05ac4a&VersionCode=2309&UserId=8224CBEB9F5FF772&isLogin=1&Page=1&Time=1644221449&Sign=c960123b24a715860970f0263f0d6ec3'''
response = requests.post('https://service.25game.com/v2/DiyPage/EmuGame.aspx',headers=headers,data=data)
print(response.text)

注意:像某东JD这种应用大多还需要手机APP登录后的Cookie,同样,Charles可以获取cookie,别忘了在python爬虫中加入到请求头中。

### 关于App数据爬取的方法、工具 #### 方法概述 应用程序的数据获取相较于传统网页抓取存在不同之处。由于许多移动应用通过API接口传递结构化数据,通常以JSON格式发送请求和接收响应,这使得解析过程相对简化[^1]。 #### 工具介绍 针对iOS平台的应用程序抓包Charles Proxy是一个广泛采用的选择;而对于安卓设备,则可以考虑使用Fiddler作为中间人代理来拦截HTTPS流量并查看HTTP(S)会话详情。这些工具能够帮助开发者捕获客户端与服务器之间的通信内容,从而进一步理解其交互逻辑以及参数构建方式[^3]。 另外值得注意的是,在某些情况下,如果目标服务提供了官方开放接口或者SDK文档说明,遵循合法途径调用相应功能可能是最便捷有效的方式之一。 #### 技术细节 当面对较为复杂的场景时——比如动态加载更多分页列表项或是基于地理位置的服务查询等需求下,可能还需要借助自动化测试框架(如Appium)模拟真实用户的操作行为完成特定任务触发后的网络请求捕捉工作。 对于文本类型的处理,有专门设计用于评估由大型语言模型产生的输出质量的解决方案,像Bexi.ai这样的AI内容识别工具有助于深入剖析来自多个对话系统的回复特征[^2]。 ```python import requests def fetch_app_data(api_endpoint, headers=None, params=None): response = requests.get(url=api_endpoint, headers=headers, params=params) if response.status_code == 200: try: json_response = response.json() return json_response except ValueError as e: print(f"Parsing failed with error {e}") return None else: print(f"Request failed with status code {response.status_code}") return None ``` 上述Python脚本展示了如何利用`requests`库向指定端点发起GET请求,并尝试将返回的结果转换成字典对象以便后续加工处理。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值