mitmproxy爬APP数据

来源:互联网 发布:澳大利亚留学费用知乎 编辑:程序博客网 时间:2024/06/03 15:11

mitmproxy是一个支持SSL的HTTP中间人代理工具,它允许你检查HTTP和HTTPS流量并支持直接改写请求。它位于客户端和Server端之间,它可以获取客户端的Request,然后修改再发送给Server端;Server端得到Request之后再发出相应的Response,又会被mitmproxy拦截,如果你想修改response,便可修改后再发给客户端。

pip install mitmproxy

打开cmd-> ipconfig 查看ip

设置端口

mitmweb -b ip地址 -p 3333  默认的端口是8080

然后设置手机wlan代理

手机端wlan ->当前连的网络 ihttp proxy->manual设置ipport




我们可以看到url, header, params的信息

response = requests.get(url=url, headers=headers)

返回json格式的字符串

result = json.loads(response.text)

result['info']['list']是我们要的数据



以上是首页的信息,每一个任务还有“查看详情页”,可以用相同的办法抓取详情页里的详细信息。

上图中的key 里的task_id 是每一个任务的id,根据这个id我们可以进入每个详情页面。
def get_details(task_id):    headers = {            'Host': '...',            'version':'300050000',            'x-cli-ver': '3.5.0',            'timestamp': '1490255088114',            'channel':'AppStore',            'Accept':'*/*',            'x-cli-ch': 'AppStore',            'Proxy-Connection': 'keep-alive',            'Accept-Language':'en-CN;q=1, zh-Hans-CN;q=0.9',            'Accept-Encoding':'gzip, deflate',            'x-cli-model':'iPhone 6s',            'x-cli-os': 'iOS10.1.1',            'sessionid' : '......',            'User-Agent': 'YNDriver/3.5.0 (iPhone; iOS 10.1.1; Scale/2.00)',            'Connection': 'keep-alive',            'x-cli-imei': '1A09A2B6-4D5B-4AF2-BC93-B76DAD8B8B3E'}    url = 'http://.....detail_v2'    params = {            'coord_sys': '2',            'recomm_key': '3692B31DBBE3932CF988CAB666FDF5AB',            #'sign': 'c2ce1baceeb32d25d86e5de32d486b4f',            'task_id': task_id}    response = requests.get(url=url, params=params, headers=headers)    result = json.loads(response.text)    return result['info']['detail_infomation']

知道了如何获取数据,我们可以开始爬数据了
from time import sleep

while 1:    try:        result_list = get_response()    except:        sleep(200)        continue

为了避免访问不成功程序停止运行,我们可以加入try except,若访问失败,则自动休息200s后再继续尝试访问

为了存储数据,以及避免放入重复的数据,我们手写一个查重和存放数据的对象Processing
import pymongoclass Processing(object):    def __init__(self):        self.client = pymongo.MongoClient('192.xxx.x.xxx')     # 创建一个连接        self.client['test'].authenticate('username', 'password')       # 登陆信息        self.db = self.client['dbname']                           # 创建数据库        self.collection = self.db['collection_name']                   # 创建collection类似表    def find_exist(self, task_id):        find_result = self.collection.find_one({'task_id': task_id})        return find_result    def insert(self, task):        self.collection.insert_one(task)                        # 插入数据

创建一个Processing实例
while 1:    try:        result_list = get_response()    except:        sleep(200)        continue    dump_data = Processing()    for task in result_list:        task_id = task['task_id']        if dump_data.find_exist(task_id=task_id):            break                                           # 如果task_id存在,则直接等下一次刷新        else:            try:                details = get_details(task_id)               # 如果订单结束报价,就get不到什么了。。。                task['quote'] = get_quote(details)                task['vehicle'] = get_vehicle(details)            except:                task['vehicle'] = 'over time'                task['quote'] = 'over time'            task['capture_time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))            dump_data.insert(task)            print(task_id)    sleep(200)                                                # 休息200秒再爬

  • 安装CA证书(https抓包用)在手机或pc机上打开浏览器访问 mitm.it 这个地址,选择你当前平台的图标,点击安装
  • mitmproxy的操作链接列表
按键说明q退出(相当于返回键,可一级一级返回)d删除当前(黄色箭头)指向的链接D恢复刚才删除的请求G跳到最新一个请求g跳到第一个请求C清空控制台(C是大写)i可输入需要拦截的文件或者域名(逗号需要用\来做转译,栗子:feezu.cn)a放行请求A放行所有请求?查看界面帮助信息^ v上下箭头移动光标enter查看光标所在列的内容tab分别查看 Request 和 Response 的详细信息/搜索body里的内容esc退出编辑e进入编辑模式





原创粉丝点击