python爬虫二十三:使用fiddler抓取app数据(三)

2023-11-20

1、什么是fiddler

Fiddler是⼀个http协议调试代理⼯具,它能够记录并检查所有电脑和互联网之间的http、https、stp等通讯,它⽀持IE、Chrome、FireFox等等浏览器,可以在phone、pad等移动设备进⾏连接不仅可以做web端也可以做移动端的数据抓取
缺点:
①他只支持http、https、stp等通讯协议的数据其他的协议不支持
②无法请求响应超过2G的数据
在这里插入图片描述

2、fiddler简介

2.1fiddler的安装

fiddler的下载:下载链接
双击安装包,安装很简单跟qq一样,安装完毕后自己找到安装目录创建快捷方式(他不会自动再桌面上生成快捷方式)
在这里插入图片描述

2.2fiddler的基本设置

2.2.1fiddler应用程序的配置

在这里插入图片描述
在这里插入图片描述
和我选择一样的即可
在这里插入图片描述

2.2.2fiddler服务器代理的配置

在这里插入图片描述
新建完毕点击创建其余按照默认选项不用动
在这里插入图片描述
在这里插入图片描述
点击switchyomega选择刚设置的情景在这里插入图片描述

2.3fiddler的介绍

①界面简介
在这里插入图片描述
②会话列表的简介
在这里插入图片描述
会话列表图标简介
在这里插入图片描述
③常规操作
在fiddler里面一共有2种流模式缓存模式(刷新完加载)、流模式(边刷新边加载)
如何设置断点
1 图形界面(拦截所有请求)
2 命令行设置断点可指定url①bpu + url② bpafter+url
清除断点①bpu ②bpa

2.4fiddler的配置(抓取app的数据前的步骤)

①配置模拟器:我以夜神模拟器为例
打开模拟器,点击设置点击属性设置选择开启桥接模式,点击安装驱动(为了获取当前环境网络中的ip地址),之后选择保存设置,点击重启模拟器

在这里插入图片描述
②修改模拟器中的手机设置
点击修改网络之后,选择高级选择代理选择手动,然后将本机的ip地址输入(电脑的内网ip,win系统在DOS中输入ipconfig就可以查看到),将fiddler的端口号输入,点击保存
在这里插入图片描述
在这里插入图片描述
③配置fiddler,选择tools中的options点击https选择from remote client让他只抓取远程客户端的数据包,避免分析数据包的时候太过凌乱
在这里插入图片描述
④在模拟器中安装证书
在这里插入图片描述
忘了截过程图,直接给证书命名点击安装就好了,他让设置密码就设置密码就行,直到出现如下图片就成功安装证书了
在这里插入图片描述

2.5使用fiddler抓取豆果美食app的数据

需求:要抓取豆果美食中的菜谱分类中的热门中的红烧肉中的做过最多次数的红烧肉的数据抓取(代码提供完整的,主要是数据包分析的过程一通百通,如果你学会了帮我点个赞谢谢)
①打开豆果美食app,它的数据包都会以douguo.net的形式返回所以只需要找对应域名,找到后会自动标黄,在黄标中查找我们想要的数据
在这里插入图片描述
②定位到想要的数据点击解码去除乱码,将json结果通过json.cn转化为可看懂字符串查找想要的数据信息(想爬什么数据就要通过这种方法区分析api)在右侧区域查看request以及response头文件,相当于浏览器的开发者工具,就是通过这些头文件来编写代码的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
③找到数据包后在pycharm中编写代码获得数据(注释我写在代码中)
待续。。。

'''
request的所有数据
POST http://api.douguo.net/recipe/flatcatalogs HTTP/1.1 post请求方式,只需要url即可
client: 4
version: 6922.2
device: MI 6
sdk: 22,5.1.1
imei: 863254010240033
channel: zhuzhan
mac: F0:03:8C:C2:AD:3F
resolution: 1280*720
dpi: 1.5
android-id: f0038cc2ad3f4318
pseudo-id: cc2ad3f4318f0038
brand: Xiaomi
scale: 1.5
timezone: 28800
language: zh
cns: 0
carrier: CHINA+MOBILE
imsi: 460072400314019
user-agent: Mozilla/5.0 (Linux; Android 5.1.1; MI 6  Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36
reach: 1
newbie: 1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: duid=66254911
Host: api.douguo.net
Content-Length: 68
以上皆为request携带的数据包我们以data字典形式传入请求当中
client=4&_session=1602856798953863254010240033&v=1503650468&_vs=2305 这个是post请求的表单数据
'''
import requests
from multiprocessing import Queue  # 进程池之间的通信
import pymongo  # 连接mongo将下载的数据保存到mongo中

header = {
    "client": "4",
    "version": "6922.2",
    "device": "MI 6",
    "sdk": "19,4.4.2",
    "imei": "863254010448503",  # 系统设置的国际移动设备识别码,就是手机序列号
    "channel": "qqkp",
    # "mac": "44:85:00:5E:5B:28",
    "resolution": "720*1280",
    "dpi": "1.5",
    # "android-id": "4485005e5b281516",
    # "pseudo-id": "05e5b28151644850",
    "brand": "Xiaomi",
    "scale": "1.5",
    "timezone": "28800",
    "language": "zh",
    "cns": "3",
    "carrier": "CMCC",
    # "imsi": "460074485009491",
    "user-agent": "Mozilla/5.0 (Linux; Android 4.4.2; MI 6  Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36",
    "reach": "1",
    "newbie": "1",
    # "lon": "116.568176",
    # "lat": "26.997867",
    # "cid": "361000",
    "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "Keep-Alive",
    # "Cookie": "duid=57158696",
    "Host": "api.douguo.net",
    # "Content-Length": "68",
}


def big_variety():
    url = 'http://api.douguo.net/recipe/flatcatalogs'
    data = {
        "client": "4",
        # "_session": "1537295931652863254010448503",
        # "v": "1503650468",
        "_vs": "2305",
    }
    result = requests.post(url, headers=header, data=data).json()
    for every_item in result['result']['cs']:  # 遍历热门、蔬菜、肉类大全...
        for every in every_item['cs']:  # 遍历家常菜、下饭菜...
            for item in every['cs']:  # 遍历上层目录中的内容
                # print(item)  # 整个菜谱分类中的每道菜都会被遍历且打印出来
                data_detail = {
                    "client": "4",
                    # "_session": "1537295931652863254010448503",
                    "keyword": item['name'],
                    "order": "3",
                    "_vs": "400",
                }
                queue.put(data_detail)  # 将详细列表的data以队列的方式存入
    # print(queue.qsize())  # 结果是517说明总过有517道菜


def detail_variety(data_detail, mong):
    print('当前爬取菜的名称为:', data_detail['keyword'])
    detail_url = 'http://api.douguo.net/recipe/v2/search/0/20'
    response = requests.post(detail_url, data=data_detail).json()
    for every_item in response['result']['list']:
        caipu = {}
        caipu['shicai'] = data_detail['keyword']
        if every_item['type'] == 13:  # 只拿tyoe等于13的数据,广告等数据type不同,避免拿错数据
            caipu['caipu_name'] = every_item['r']['n']
            caipu['user_name'] = every_item['r']['an']
            caipu['shicai_id'] = every_item['r']['id']
            caipu['describe'] = every_item['r']['cookstory']
            caipu['zuoliao_list'] = every_item['r']['major']
            # print(caipu)  # 拿到了20条数据
            little_url = 'http://api.douguo.net/recipe/detail/' + str(caipu['shicai_id'])
            little_data = {
                "client": "4",
                # "_session": "1537295931652863254010448503",
                "author_id": "0",
                "_vs": "2803",
                "_ext": '{"query":{"id":' + str(caipu['shicai_id']) + ',"kw":' + caipu[
                    'shicai'] + ',"idx":"4","src":"2803","type":"13"}}',
            }
            res = requests.post(little_url, headers=header, data=little_data).json()
            caipu['tips'] = res['result']['recipe']['tips']
            caipu['cook_step'] = res['result']['recipe']['cookstep']
            print('当前入库的菜谱是:', caipu['caipu_name'])
            mong.insert_item(caipu)  # 调用数据库中自定义的方法保存数据
        else:
            continue


class ConnectMongo():  # 创建一个mongodb类
    def __init__(self):
        self.client = pymongo.MongoClient(host='127.0.0.1', port=27017)
        # 定义数据库和集合的名字
        self.db = self.client['douguo']['item']

    def insert_item(self, item):
        self.db.insert(item)


if __name__ == '__main__':
    queue = Queue()  # 创建进程队列
    detail = big_variety()
    mong = ConnectMongo()  # 实例化数据库传入要保存的队列中
    detail_variety(queue.get(), mong)  # 以爬取20道菜为例
    queue.close()
    # for i in range(20):# 将队列中所有的菜系全部取出,爬取细节逻辑没写
    #         detail_variety(queue.get(), mong)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫二十三:使用fiddler抓取app数据(三) 的相关文章

随机推荐

  • CentOS7 安装Teamviewer

    CentOS7 安装Teamviewer 下载 wget https download teamviewer com download teamviewer i686 rpm 安装 yum install y 文件名 在终端执行一下命令进行
  • 异步通信时钟亚稳态打拍

    为了降低亚稳态出现的概率把异步信号单比特打两排 将下面的即可 最后用第三位的数据就是打两拍后的结果 在这里插入代码片 reg 2 0 wr n r always posedge clk or nesedge rst n begin if r
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • 选择多级分类_分类汇总——Excel中最直接有效的数据汇总方式

    在我们正常处理数据过程中 通常会有用到对数据中某一个或者多个指标 字段 进行汇总 求和 求平均等 的操作 我们可以使用譬如sumif sumifs averageif count等一些函数进行 这些函数在后面的文章中我也会讲到 今天我们来讲
  • [项目管理-15]:项目执行中的三大管理者:项目活动管理、职能部门管理、产品架构设计。

    目录 1 矩阵项目管理 2 项目活动管理 2 1 项目架构 2 2 项目管理活动 3 职能部门管理 要与产品 设备架构一致 3 1 组织架构 3 1 需求部门 3 2 硬件开发部门 3 3 软件开发部门 3 4 测试部门 4 产品设备管理
  • 部署前后端分离项目前端vue后端django

    1 前端部署 前后端分离的项目 部署时 前端我们只需要打包成dist文件 放到到后端项目中即可 npm run build 2 后端部署 后端部署 我这里主要讲基于uwsgi启动项目的方式 2 1 uwsgi的配置 uwsgi master
  • 6个好用的AI绘画工具,一键生成超精美图片!

    给大家分享6个好用的AI绘画工具 操作简单 小白也能用 生成的图片效果也好 其中有几个还完全免费 先给大家看看一些生成的图片吧 1 Vega AI 一个免费的AI绘画网站 手机号登录之后就可以使用了 它有文生图 图生图和条件生图的模式可选
  • 2023年最新5A景区有多少个?Python可视化告诉你

    2023年最新5A景区有多少个 Python可视化告诉你 五一小长假来了 很多人想抓住小长假的机会去旅游 5A景区是大多数人的首选 全国最新有多少个5A景区呢 应该还有很多人不知道 本文用Python进行可视化 告诉你答案 各年5A景区数量
  • vue3使用import.meta.env在vite.config.ts下使用env环境变量的方法

    vue3使用import meta env在vite config ts下使用env环境变量的方法 编程一枚的博客 CSDN博客
  • 一个关于jvm堆溢出引发的思考

    在本地测试无误的程序 放上正式服时 出现了堆溢出 本地是Windows系统下的 服务器是linux系统 后来经过测试发现是我在本地跑程序时 在eclipse中添加了如下参数 此处先解释下上面各参数的的含义 Xms512m 堆的最小值 Xmx
  • mysql视图

    一 什么是视图 视图是指计算机数据库中的视图 是一个虚拟表 其内容由查询定义 同真实的表一样 视图包含一系列带有名称的列和行数据 但是 视图并不在数据库中以存储的数据值集形式存在 行和列数据来自由定义视图的查询所引用的表 并且在引用视图时动
  • Java使用反射实现IOC容器

    前面写过怎么通过Java的反射技术实现对象的创建和管理 达到IOC的效果 但是没有讲设计的思路 直接上代码 导致很多人没有思路 因此今天具体的讲IOC的编写思路理清 这里单纯的通过Java中的反射创建对象 至于扩展的部分会有提示思路 既然提
  • 【深度解析→博文总结】李宏毅机器学习2023作业05Transformer(Machine Translation)

    文章目录 系列文章 简要说明 视频分享 作业详情 调参记录 Simple Baseline 15 05 Medium Baseline 18 44 Strong Baseline 23 57 Boss Baseline 30 08 资源链接
  • CVE-2019-11043(PHP远程代码执行漏洞)

    一 漏洞描述 CVE 2019 11043 是一个远程代码执行漏洞 使用某些特定配置的 Nginx PHP FPM 的服务器存在漏洞 可允许攻击者远程执行代码 向Nginx PHP FPM的服务器 URL发送 0a 时 服务器返回异常 该漏
  • windows配置检查

    文章目录 2 1 账号口令 2 1 1 检查是否已正确配置密码最长使用期限 2 1 2 检查是否已正确配置密码长度最小值 2 1 3 检查是否已正确配置 强制密码历史 2 1 4 检查是否已正确配置帐户锁定时间 2 1 5 检查是否已正确配
  • 操作系统简史(1)东方会有新的操作系统诞生吗?让历史告诉未来

    打造一个新的操作系统很难 打造一个新的操作系统不难 难的是建立一个以之为核心的生态系统 估计大家都被这两个问题给困惑过 第一个问题的答案是 有难度 但也不像许多人想象的那样难 如果不是这样 那么我们今天就不会用到Windows 不会用到Li
  • 机器学习笔记1—泰勒展开式和牛顿法

    写在前面 自学机器学习的菜鸟一枚 希望通过记录博客的形式来记录自己一点点的进步 下面都是学习过程中自己的一些思考和学习 希望大神们批评指正 1 1 泰勒展开式 1 1 1泰勒展开式入门 首先 百度了一波 搜到了一个泰勒展开式入门的短短6分钟
  • Linux命令行基本用法总结【自用】

    1 awk 这条语句只能说非常牛逼 我还在傻傻的写程序处理字符文件时 被awk劝退 深度好文 http www zsythink net archives 1336 主要的用法就是 awk F分隔符默认为空格 BEGIN 代码 代码 END
  • apollo配置中心启动失败,坑的一批

    1 按照官方文档一步一步来的 启动失败 2 看启动日志发现是数据库连接的问题 3 可是我防火墙都关了 数据库设置的还是所有机器可连接 而且还是本机数据库 以为是数据库的原因 试了好多方法 甚至用了阿里云服务器中的数据库尝试 还是连接失败 有
  • python爬虫二十三:使用fiddler抓取app数据(三)

    1 什么是fiddler Fiddler是 个http协议调试代理 具 它能够记录并检查所有电脑和互联网之间的http https stp等通讯 它 持IE Chrome FireFox等等浏览器 可以在phone pad等移动设备进 连接