zoukankan      html  css  js  c++  java
  • python3编写网络爬虫19-app爬取

    一、app爬取

    前面都是介绍爬取Web网页的内容,随着移动互联网的发展,越来越多的企业并没有提供Web页面端的服务,
    而是直接开发了App,更多信息都是通过App展示的

    App爬取相比Web端更加容易 反爬虫能力没有那么强,而且数据大多数是以JSON形式传递的 解析更加简单

    在Web端 我们可以通过浏览器开发者工具 监听到各个网络请求和响应过程 在App端 查看内容就需要抓包软件
    例如 WireShark Fiddler Charles mitmproxy AnyProxy等 它们原理基本相同

    可以通过设置代理的方式将手机处于抓包软件的监听下 就可以看到App运行过程中发生的所有请求和响应
    相当于分析Ajax一样

    如果参数程序是有规律的 直接用程序模拟爬取即可
    如果没有规律 可以通过mitmdump 对接Python脚本 处理response

    如果需要自动化 可以使用Appium

    1.charles的使用

    简介 : 是一个网络抓包工具 可以用它来做app抓包分析 类似Web浏览器的开发者工具

    安装 官网:

    https://www.charlesproxy.com

    下载地址 :

     https://www.charlesproxy.com/dowload

    默认安装即可

    charles 是收费软件 免费试用30天

    证书配置

    现在很多页面都在向HTTPS方向发展 HTTPS通信协议应用越来越广泛 如果一个App通信应用了HTTPS协议
    那么它的通信数据都会被加密 常规的截包方法无法识别内部数据

    需要配置SSL证书

    Charles是运行在PC端的 抓取的是App端的数据 所以PC和移动端都要安装证书


    PC端安装证书

    打开charles 点击Help -> SSL Proxying -> Install Charles Root Certificate 进入安装证书的页面

    点击安装证书 点击下一步 选择将所有证书放入下列存储 点击浏览 选择存储位置为 受信任的根证书颁发机构 点击确定

    如果报错 存储已满 或者只读 解决办法

    win+R 输入mmc 点击文件 添加删除管理单元
    点击证书 点击添加 选择计算机账户 下一步 确定

    重新导入证书


    移动端安装证书


    首先保证手机和电脑在同一局域网 (有网线的情况下) 手机设置选择wifi 手动代理 添加charles的ip和端口
    设置完电脑会弹出是否信任此设备 点击allow即可

    手机浏览器(尽量不要用默认的浏览器 可以使用QQ浏览器)打开chls.pro/ssl 给证书添加个名字 点击确定就能完成证书的安装

    手机访问互联网 数据包会流经charles charles再转发数据包到真实服务器 服务器在返回数据包 流经charles
    在转发给手机

    设置好charles并且配置好证书

    示例 打开京东 选一个商品 打开商品评论页面 不断下拉加载评论

    左侧会有一个api.m.jd.com 点击其中一条 切换到contents选项卡 可以看到JSON数据 核对结果 和app上看到的内容一致
    这样就捕获到了在上拉刷新的请求和响应内容

    重发 charles另一个强大功能可以将捕获的请求加以修改并重新发送

    可以用来做调试


    2.mitmproxy的使用

    是一个支持HTTP和HTTPS的抓包程序类似Fiddler charles 只不过是一个控制台形式操作

    mitmproxy还有两个相关组件 mitmdump 命令行接口 利用它可以对接python脚本
    另一个是mitmweb 一个web程序 通过它可以清楚观察捕获的请求

    安装

    下载地址:

    https://github.com/mitmproxy/mitmproxy/releases

    默认安装即可

    证书配置

    启动mitmdump 找到mitmproxy文件下ca证书 双击mitmproxy-ca.pl2 默认下一步即可
    选择将所有证书放入下列存储 点击浏览 选择存储位置为 受信任的根证书颁发机构 点击确定

    手机 将文件发送到手机 点击安装

    通过 手机微信助手 发送 mitmproxy-ca-cert.cer 手机点击wifi 高级设置 安装证书 默认download 返回上一级 内部存储空间

    tencent -> MicroMsg -> Download 点击安装

    运行 mitmdump 是mitmproxy的命令行接口 同时可以对接python脚本

    示例:

    可以使用命令启动mitmproxy 例如 mitmdump -w outfile 截获的数据都会被保存到此文件中

    指定脚本来处理截获的数据 使用-s参数

    mitmdump -s test.py

    脚本文件内容如下

    def request(flow):
    flow.request.headers['User-Agent'] = 'MitmProxy'
    print(flow.request.headers)

    这里 定义一个request() 方法 参数为flow 通过request属性获取当前请求对象 打印输出请求的请求头
    将User-Agent修改成了MitmProxy

    手机端访问 http://httpbin.org/get

    日志输出

    mitmdump 提供了专门的日志传输系统 可以设定不同颜色输出结果 修改脚本如下:

    确保安装好mitmproxy pip install mitmproxy

    from mitmproxy import ctx
    
    def request(flow):
    flow.request.headers['User-Agent'] = "MitmProxy"
    ctx.log.info(str(flow.request.headers))#输出白色
    ctx.log.warn(str(flow.request.headers))#输出黄色
    ctx.log.error(str(flow.request.headers))#输出红色
    
     


    request

    示例

    from mitmproxy import ctx
    
    def request(flow):
      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(str(request.post))
      info(request.scheme)

    修改脚本 手机打开百度 分别输出 请求链接 请求头 cookies host 请求方法 端口 协议

    同时还可以对任意属性进行修改 就像最初修改Headers一样 直接赋值

    示例:

    def request(flow):
      url = 'https://httpbin.org/get'
      flow.request.url = url

    更多属性参考 http://docs.mitmproxy.org/en/latest/scripting/api.html

    响应

    response() 方法

    示例:

    from mitmproxy import ctx
    
    def response(flow):
      response = flow.response
      info = ctx.log.info
      info(str(response.status_code))
      info(str(response.headers))
      info(str(response.cookies))
      info(str(response.text))

    打印出响应状态码 headers cookies 网页源代码等

  • 相关阅读:
    Chisel3
    Chisel3
    Chisel3
    Chisel3
    Chisel3
    Chisel3
    Chisel3
    Chisel3
    Chisel3
    UVa 12716 (GCD == XOR) GCD XOR
  • 原文地址:https://www.cnblogs.com/liuxiaosong/p/10368412.html
Copyright © 2011-2022 走看看