• Python爬虫学习笔记8:APP的爬取


    说明:本学习笔记主要参考:Python3网络爬虫开发实战一书

    常用的抓包软件有WireShark、Charles、Fildder、mitmproxy、AnyProxy等。

    原理:通过设置代理的方式将手机处于抓包软件的监听之下,获取APP运行的过程中发生的所有请求及响应,如果请求的URL及参数有规律,用程序模拟爬取即可。如果没有,可以利用mitmdump对接Python脚本直接处理Response,还可以利用APPium 进行自动化爬取控制。

    一、Charles

    下载地址:https://www.charlesproxy.com/download/

    证书配置:SSL证书是为了通过HTTPS协议,Charles客户端和手机都要同时转有SSL证书。

    mac 

    Help-ssl proxying - install charles root certificate

    选择始终信任。

    设置手机证书配置

    先开启Charles代理,proxy-proxy settings

    将手机同电脑连在同一个局域网下面。

    查看本机IP地址,终端输入:ifconfig

    安卓手机如何设置代理参考:https://blog.csdn.net/songzi1228/article/details/89950109

    设置好代理后,charles界面会有提示,点击allow即可。

    下面就是在手机上安装ssl证书

    我的手机是一加7pro,在手机浏览器上打开chls.pro/ssl下载即可,不过直接安装不了。

    可以从设置-安全与锁屏-加密与凭据-从存储设备中安装-左上角点击进去oneplus 7 pro-搜索charles,按提示安装即可。

    下面试着监听下京东APP的信息。

    第一个清空列表信息,第二个启动监听,红色状态是:监听中

    如果遇到出来的response乱码,可以设置

    proxy-ssl proxy settings - add 

    Host:填*表示所有网站都抓 
    Port:443 
    点击OK,就不再乱码了。

    打开手机京东APP,搜索华为,点开9xpro ,获取评论信息

    成功获取到。

    overview;里面显示了请求的接口URL,响应状态status code , 请求方式method

    contents:里面显示的请求和响应的详细信息

    这个按钮还可以对URL链接进行修改,重发请求,这样就能知道哪些参数字段是无关紧要的。

    但是APP接口往往会带有迷药,并不能直接找到这里面的规律,可以利用Charles和mitmproxy直接对接python脚本实现实时处理抓取到的response

    二、mitmproxy

    两个关联组件:

    mitmdump:命令行接口,利用它对接python脚本。

    mitmweb:web程序,观察mitmproxy捕获的请求

    mitmproxy配置安装 mac 版本

    终端输入:brew install mitmproxy

    终端输入:mitmdump  即可产生CA证书

    进入用户目录,查看证书

    cd ~

    cd .mitmproxy

    open ./

    即可查看CA证书

     

    证书说明:

    mitmproxy-ca-cert.cer:与mitmproxy-ca-cert.pem相同,只是改变了后缀,适用部分andriod平台

    mitmproxy-ca-cert.p12:PKCS12格式的证书,适用Windows 平台

    mitmproxy-ca-cert.pem:使用大多数非Windows平台

    mitmproxy-ca.p12:

    mitmproxy-ca.pem:PEM格式的证书

    mitmproxy-dhparam.pem:

    mac端双击mitmproxy-ca-cert.pem进行配置即可,形式参考前面证书配置过程。

    然后在把mitmproxy-ca-cert.cer证书发送到我的手机端进行配置,形式参考前面配置过程(我的手机是安卓版本),如果是苹果择选择mitmproxy-ca.pem。

    mitmproxy 功能说明:

    拦截HTTP和HTTPS的请求和响应

    保存HTTP回话并进行分析

    模拟客户端发送请求,模拟服务器返回响应

    利用反向代理将流量转发给指定的服务器

    支持mac和Linux上的透明代理

    利用python对HTTP请求和响应进行实时处理

    mitmproxy抓包原理

    mitmproxy 会在pc端的8080端口运行,然后开启一个代理服务,手机和 PC 在同一个局域网内,设置代理为 mitmproxy 的代理地址,这样手机在访问互联网的时候流量数据包就会流经 mitmproxy, mitmproxy 再去转发这些数据包到真实的服务器,服务器返回数据 包时再由 mitmproxy 转发回手机,这样 mitmproxy 就相当于起了中间人的作用,抓取到所有 Request 和 Response ,另外这个过程还可以对接 mitmdump ,抓取到的 Request 和 Response 的具体内容都可以 直接用 Python 来处理,比如得到 Response 之后我们可以直接进行解析,然后存入数据库,这样就完 成了数据的解析和存储过程。

    设置代理

    终端运行:mitmproxy

    会在8080端口运行一个代理服务,如下图

    接下来把手机和PC链接在同一局域网下面,设置方法参考前面Charles设置方式。

    mitmproxy使用

    前面设置好证书后,mitmproxy就已经开始工作了

    210/210代表一共发升了210个请求,当前箭头所指的是第210个请求。按回车即可进入请求的详情页面。

    每个请求开头都有一个GET或POST , 这是各个请求的请求方式。 紧接的是请求的 URL。 第二行 开头的数字就是请求对应的响应状态码, 后面是响应内容的类型 , 如 text/html 代表网页文档、 image/gif 代表图片。 再往后是响应体的大小和响应的时间

    在列表界面,按回车进入详情界面。

    在详情界面,按q,返回列表界面。

    在列表界面,按G跳到最新一个请求。

    在列表界面,按g跳到第一个请求。

    在列表界面,按d删除当前选中的请求,按D恢复刚才删除的请求。

    三、mitmdump的使用

    mitmdurnp 是 mitmproxy 的命令行接口, 同时还可以对接 Python 对请求进行处理,有了它我们可以不用手动截获利分析 HTTP 请求和响应,只需要写好请求和响应的处理逻辑即可。它还可以实现数据的解析、存储等士作, 这些过程都可以通过 Python 实现。

    mitmdump -w outfile 截获数据并保存在outfile中

    mitmdump -s scripy.py 使用-s参数指定一个脚本来处理获取的数据

    from mitmproxy import ctx
    
    def request(flow):
        # flow.request.headers['User-Agent'] = 'MitmProxy'
        # print(flow.request.headers)
        # ctx.log.info(str(flow.request.headers)) # info方法输出内容为白色
        # ctx.log.warn(str(flow.request.headers)) # warn方法输出内容为黄色
        # ctx.log.error(str(flow.request.headers)) # error方法输出内容为红色
        request = flow.request
        info = ctx.log.info
        info(request.url)
        info(str(request.headers))
        info(str(request.cookies))
        info(request.host)
        info(request.method)
        info(request.scheme)
        info(str(request.port))

    四、Appium

    Appi um 是一个跨平台移 动端向动化测试 工具,可以非常便捷地为 iOS 和 Android 平台创建自动化测试用例。 它可以模拟 App 内部的各种操作 , 如点击、滑动、 文本输入等, 只要我们手工操 作的 动作 Appium 都可以完成。 在前面我们了解 过 Selenium , 它是一个网页端 的向动化测试工 具。 Appium 实际上继承了 Se lenium, Appi um 也是利用 W巳bDriver 来实现 App 的向动化测试。 对 iOS 设备来说, Appium 使用 UIAutomation 来实现驱动 。 对于 Android 来说, 它使用 UiAutomator 和 Selendroid 来实现 驱动 。

    下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.13.0

    安装对应电脑版本即可

    打开软件,如图:

    Android 开发环境配置

    下载和配置 Android SDK ,推荐直接安装 Android Studio。地址:https://developer.android.com/studio/index.html?hl=zh-cn

    添加环境变量,参考:https://blog.csdn.net/jlminghui/article/details/81204352

    启动APP

    两种方式:内置驱动器来打开APP,另外一种是利用python程序

    启动Appium,点击start server,即可看到欢迎页面

    用手机通过数据线和电脑相连接,同时打开USB调试功能(我手机是一加7pro,打开方式参考:https://www.jb51.net/shouji/674653.html)

    打开后,电脑终端输入:adb devices -l

    如出现上面结果,择说明PC已经正确链接手机了。

    接下来用点击Appium上右上角的放大镜按钮

    会出现一个配置界面

    启动APP时要配置desired capabilities参数,分别为

    点击启动后,会出现下面页面

    点击下APP中登陆按钮,中间的APP source部分就会有高亮部分,点击高亮部分代码,右边的selected element 下面的tap send keysclear 即可使用

     

  • 相关阅读:
    IE10/IE9 Click Enter will trigger submission
    错误代码以及错误消息提示-如何更好地管理与维护消息资源
    Redmine2.6.1 升级与Agile插件安装
    编译安装的 mysql apache 用 service mysqld start 来启动
    编译安装php 5.5 缺少依赖包 及解决方案
    linux 下mysql的启动 、调试、排错
    linux 的 磁盘操作
    mysql 触发器的创建 修改 删除
    创建mysql存储过程,调用 及删除
    存储函数的创建 删除 修改
  • 原文地址:https://www.cnblogs.com/zheng1076/p/11353284.html
Copyright © 2020-2023  润新知