python 手机app数据爬取

今天向你们介绍app爬取。
@python

一:爬取主要流程简述

1.APP的爬取比Web爬取更加容易,反爬虫没有那么强,且大部分数据是以JSON形式传输的,解析简单。android

2.在APP中想要查看请求与响应(相似浏览器的开发者工具监听到的各个网络请求和响应),就须要借助抓包软件。c++

3.在抓取以前,须要设置代理将手机处于抓包软件的监听下,就能够用同一网络进行监听,得到全部的网络和请求。git

4.若是是有规则的,就只须要分析便可;若是没有规律,就能够用另外一个工具mitmdump对接Python脚本直接处理Response。github

5.抓取确定不能由人手动完成,还须要作到自动化,还要对App进行自动化控制,能够用库Appium。


web

二:抓包工具Charles

1.Charles的使用

   Charles是一个网络抓包工具,比Fiddler功能更强大,能够进行分析移动App的数据包,获取全部的网络请求和网络内容

数据库

2.安装

(1)安装连接

   官网:https://www.charlesproxy.comjson

(2)须知

   charles是收费软件,但能够免费试用30天。试用期过了,还能够试用,不过每次试用不能超过30分钟,启动有10秒的延迟,但大部分还可使用。windows

(3)安装后

在这里插入图片描述

3.证书配置

(1)证书配置说明

   如今不少网页都在向HTTPS(超文本传输协议的加密版,即HTTP加入SSL层),通过SSL加密更加安全,真实,大部分都由CA机构颁发安全签章(12306不是CA机构颁发,但不被信任)。如今应用HTTPS协议的App通讯数据都会是加密的,常规的截包方法是没法识别请求内部的数据的。
   要抓取APP端的数据,要在PC和手机端都安装证书。

(2)windows系统安装证书配置

   打开Charles,点击Help->SSL Proxying->Install Charles Root Certificate,进入证书的安装页面:
在这里插入图片描述
   点击安装证书,就会打开证书安装向导,而后点击下一步,此时须要选择证书的存储区域,选择第二个选项”将全部证书放入下列存储”:
在这里插入图片描述
   而后点击浏览,选择证书存储位置为”受信任的根证书颁发机构”,点击确认并进入下一步:
在这里插入图片描述

(3)Android手机安装证书配置

手机与电脑链接同一个WiFi。
设置以下:
能够用操做系统命令ipconfig查看PC端ip:

在这里插入图片描述
   为10.61.131.172,默认代理端口号为8888。以后代理服务器为电脑的IP地址。端口为8888。设置以下:
在这里插入图片描述
会发现360手机的标志
在这里插入图片描述
接下来对手机下载证书:
访问手机访问 chls.pro/ssl ,下载证书:
在这里插入图片描述
   此时下载的是个.pem 格式的。须要手动更改成.crt 格式,最后随便放进某个文件夹便可:
在这里插入图片描述
用手机(我用的360手机)设置里的安全,找到从存储设备安装找到该crt文件进行配置:
在这里插入图片描述
此时须要设置锁屏:
在这里插入图片描述
就能够完成证书的安装。

4.开启SSL监听

   点击Proxy->SSLProxying Settings,在弹出的窗口中点击Add按钮,添加须要监听的地址和端口号。须要监听全部的HTTPS请求,能够直接将地址和端口设置为,即添加:*设置,就能够抓取全部的HTTPS请求包;若是不配置,抓取的HTTPS请求包状态多是unknown。
在这里插入图片描述
在这里插入图片描述
这样就指定只监听咱们须要的ip和端口的请求和响应。

5.原理

   Charles运行时会在PC端的8888开启一个代理服务,其实是一个HTTP/HTTPS的代理。
   能够是用手机经过相同的无线网络链接(这里用的是校园网),设置手机代理为Charles的代理地址,这样手机访问互联网的数据就会通过Charles抓包工具,Charles转发这些数据到真实的服务器,再转发到手机中。这样抓包工具(Charles)就起到了中间人的做用,还有权对请求和响应进行修改。

6.抓包

   咱们能够看到咱们已经请求了不少数据了,点击左上角的扫帚按钮便可清空捕获到的全部请求,而后点击第二个监听按钮,代表Charles正在监听App的网络数据流。以下:
在这里插入图片描述
抓包后能够看到音乐:
在这里插入图片描述
   能够经过分析不一样的URL请求,得到数据,也能够经过修改数据,获得那些参数是须要的。
在这里插入图片描述
   这是有规则的,无规则的若是没有规律的url,就能够用另外一个工具mitmdump对接Python脚本直接处理Response。



三:抓包工具mitmproxy(免费的)

1.简介

   mitmproxy是一个支持HTTP和HTTPS的抓包程序,有相似Fiddler和Charles的功能,但它是一个控制台的形式操做。

2.关联组件

   mirmproxy还有两个关联组件。一个是mitmdump,是命令行接口,能够对接Python脚本,用Python处理数据;另外一个是mitmweb,是一个web程序,能够清楚地查看mitmproxy捕获的请求。

3.安装和证书配置

(1)用pip安装

   这个是安装python后就有的安装方法,也是最简单的安装方法,在控制台输入
   Pip install mitmproxy便可,会自动安装mitmdump和mitmweb组件:
在这里插入图片描述
可是到最后安装会失败:
在这里插入图片描述
   是由于安装这个包的 window 系统须要首先安装 Microsoft Visual C++ V14.0以上 才行。
   能够在https://visualstudio.microsoft.com/downloads/
直接下载便可,安装以后须要c++的库之类的东西都安装了,而后再在命令行进行安装 mitmproxy便可:
在这里插入图片描述
而后进入安装目录,咱们选择第三个:
在这里插入图片描述
在“安装 Visual Studio”屏幕中找到所需的工做负载,选择"使用的桌面开发C++"工做负荷:
注:这里的文件太大,我直接安装到E盘。
在这里插入图片描述
以后再安装就能够安装成功了:
在这里插入图片描述

(2)在GitHub或官网上安装

GitHub:https://github.com/mitmproxy/mitmproxy
官网:https://mitmproxy.org
下载地址:https://github.com/mitmproxy/mitmproxy/releases

3.证书配置

(1) 产生CA证书

   对于mitmproxy来讲,若是想要截获HTTPS请求,也须要设置证书。它在安装后会提供一套CA证书,只要客户端信任了mitmproxy的证书,就能够经过mitmproxy获取HTTPS请求的具体内容,不然没法解析HTTPS请求。
   在cmd中输入命令行接口命令mitmdump,产生CA证书,在用户目录找到CA证书:
在这里插入图片描述
在这里插入图片描述
这里的目录能够自行指定,但必须是在第一次运行mimdump时。
(2)PC端安装
   电脑是Window系统,所以用mitmproxy-ca.p12,双击后出现导入证书的引导页:
在这里插入图片描述
点击下一步,不须要设置密码:
在这里插入图片描述
接下来点击下一步,须要选择证书的存储区域,和配置Charles同样:
在这里插入图片描述
最后会有警告,选择是便可,证书就安装到咱们的电脑上了:
在这里插入图片描述
在这里插入图片描述
(3)手机端安装
   个人手机是Android系统,直接把mitmproxy-ca.pem文件发送到手机上便可。
   配置方法和Charles相似。HTTPS请求。
   手动更改成.crt 格式,最后随便放进某个文件夹便可,用手机(我用的360手机)设置里的安全,找到从存储设备安装找到该crt文件进行配置:
在这里插入图片描述
在这里插入图片描述

4.抓包原理

   在mitmproxy中,会在PC端的8080端口运行,而后开启一个代理服务,就是一个HTTP/HTTPS代理,相似ip代理。
   手机和PC在同一局域网内,设置代理为mitmproxy的代理地址,抓包工具mitmproxy就至关于中间人的做用,数据就会流经抓包工具。这个过程还能够对接mitmdump,抓取到的请求和响应均可以直接用Python来处理,而后分析,存到本地,或存到数据库。

5.设置代理

   在抓包前须要先设手机局域网置代理为抓包工具mitmproxy代理。

(1)启动代理服务

   在cmd中输入mitmproxy,会在8080端口运行一个代理服务,因为该命令不支持Windows系统,所以在Windows系统中用mitmdump命令:
在这里插入图片描述
用mitmdump启动代理服务,监听8080端口:
在这里插入图片描述

(2)设置当前代理

   将手机和电脑连到同一局域网下,先用操做系统命令ipconfig查看PC端当前局域网的ip:
在这里插入图片描述
为10.61.131.172,在手机端设置代理以下:
在这里插入图片描述
这样就配置好了mitmproxy的代理。

6.抓包

   运行mitmweb(因为mitmproxy不能用),就能够看到手机上的全部请求:
在这里插入图片描述
网页呈现以下:
在这里插入图片描述
   随便打开一条网络请求,发现和在网页的开发者工具下,监听到的同样:
在这里插入图片描述
在这里插入图片描述

7.mitmproxy的高级功能mitmdump

   上面的功能与方法在Fiddler和Charles中也有,那么mitmproxy的优点何在?
   在mitmproxy中它的强大致现到mitmdump工具,能够对接Python对数据请求进行处理。
   它是mitmproxy的命令行接口,能够对接python程序对请求进行处理,不须要手动截取和分析HTTP请求和响应,进行数据存储和解析均可以经过Python来完成。

(1)简单获取数据(随便一个app)

咱们先建立一个文件夹:
在这里插入图片描述
而后打开转到该文件夹下:
在这里插入图片描述
   输入mitmdump -w outfile(outfile名称和扩展名能够自定义,文件放到当前cmd打开目录下,也能够用绝对相对路径,但比较麻烦):
截取广播页面:
在这里插入图片描述
在这里插入图片描述
以后把截获的数据保存到文件夹下:
在这里插入图片描述
打开文件,发现好多乱码:
在这里插入图片描述
下面会对其进行处理。

(2)能够指定一个脚原本处理截获的数据:

   Mitmdump -s script.py(脚本名字能够自定义),须要放在cmd当前目录下,也能够用绝对相对路径,但比较麻烦。
写入以下代码:
在这里插入图片描述
   就是定义了一个request()方法,参数为url,实际上是一个HTTPFlow对象,经过request属性便可获取到当前请求对象。而后打印出请求头,将User-Agent(用户代理,简称 UA,它是一个特殊字符串头,使得服务器可以识别客户使用的操做系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言浏览器插件等)修改成MitmProxy。
运行以后手机端访问http://httpbin.org/get,能够看到请求头:
在这里插入图片描述
PC端以下:
在这里插入图片描述
   手机端请求的Headers实际上就是请求的Headers,User-Agent被修改为了mitmproxy(防反爬),PC端显示修改后的Headers内容,其User-Agent正是MitProxy。
   这样就可让服务器识别不出咱们的是爬虫程序了。

(3)日志输出

   mitmdump提供了专门的日志输出功能,就是设定输出到控制台的颜色,能够分别为不一样级别配置不一样的颜色,更加直观:
在这里插入图片描述
效果以下:
在这里插入图片描述

(4)输出请求数据

   能够输出一些请求信息,好比请求链接(url),请求头(headers),请求Cookies(cookies),请求Host(host),请求方法(method),请求端口(port),请求协议(scheme)等。
   还能够把这些请求的信息进行修改后,再发送到服务器中,这样,服务器返回的可能不是app想请求的网页,这就是为何一些app打开后却访问到了其余网址的缘由。
   也能够经过该用法,经过修改Cookies,添加代理等方式来尽量避免反爬。
这里就先进行略过。

(5)得到响应

   响应就是请求后服务器返回的信息,也就是咱们须要的,大部分是json格式文件。
   对于json格式文件,mitmdump也提供了对应的处理接口,就是response()方法。
   咱们能够打印各个http/https请求的响应内容,不过text才是咱们想要的json格式文件,也能够用content,不过返回的是二进制文件。
代码以下:
在这里插入图片描述
咱们先试一下:
在这里插入图片描述
内容有些乱,接下来咱们就进行分析获得咱们须要的数据。



四:利用mitmproxy进行app数据获取

1.获取请求url

获取http/https请求url,也能够认为是接口:
修改python文件,得到请求的url:
在这里插入图片描述
而后停留在该页面:
在这里插入图片描述
会发现出现了好多url:
在这里插入图片描述
咱们一一分析一下,发现接口信息分别是:
这个接口
https://images.sanmaoyou.com/img/new_images/5ac83890033ec.jpg
是GET请求获取文件:
在这里插入图片描述
这个接口的为json文件,为GET获取方式:
在这里插入图片描述
在这里插入图片描述
这个接口
https://images.sanmaoyou.com/audio/library/2018-04/5ac83887c5263.mp3
是下载音乐,为GET获取方式:
在这里插入图片描述
这个接口
http://sdk-open-phone.getui.com/api.php?format=json&t=1&d=76060FDC1EFFF74C1956225F1DBEE6AF006578C33658C4AF90D802512BF321C8&k=2是POST方式,是传文件。
咱们在向右点击下一个广播,进行验证:
在这里插入图片描述
   发现基本上,新打开一个广播后,会加载mp3文件,图片文件,比较长的接口就返回json文件:
在这里插入图片描述

2.接口url文件

把接口保存到txt文件中:
在这里插入图片描述
发现只有很长的接口才返回json文件。所以下面就须要对这些接口进行筛选。

3.爬取json

代码在pa_qu_json.py文件中,须要先建立一个json爬取数据文件夹,爬取后的结果以下:
在这里插入图片描述
在这里插入图片描述

接下来用Python处理便可,这里只是简单爬取。在实际应用中,不是人工的,是用代码自动化进行分析各个请求和响应进行爬取。这里有个跨平台的移动端自动化测试工具,能够很方便地进行自动化爬取,在下一个爬虫博客中会详细讲到,但愿你们把宝贵意见提出来一块儿学习进步。

相关文章
相关标签/搜索