工欲善其事,必先利其器,要实现我们的需求,当然是先准备我们所需的工具,本次主要主要用的工具有:
查看更多python相关内容,可以查看我的个人网站:大圣的专属空间
Android SDK安装
对于Android SDK的安装,博主主要参考崔大大的博客安卓SDK环境配置
Java SDK安装
此软件安装按照百度搜索出来的即可:JDK安装
mitmproxy安装过程中遇到的问题
针对mitmproxy的安装,按照崔大大的博客安装教程mitmproxy的安装即可,不过博主的安装过程中运行pip install mitmproxy出现了以下问题:
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
是因为安装这个包的 window 系统需要首先安装 Microsoft Visual C++ V14.0以上 才行。
目前直接点击蓝色界面已经找不到网页链接(网传该工具国内被墙了,无法直接下载)。
博主的解决方案是:在https://visualstudio.microsoft.com/zh-hans/downloads/直接下载即可,下载打开之后按照如下图所示的方式安装相关插件:
选择“使用 C++ 的桌面开发”,选择默认的安装内容即可(尽量自己定义安装位置),安装过程较慢,耐心等待,安装完成之后在命令行进行安装 mitmproxy即可。
大致过程安装崔大大博客里介绍的安装即可,有几条提醒的:
据说配置好开发环境就已经干掉百分之七十的人了,相信自己一定可以的,而且你遇到的问题百分之百能在网上搜到解决方法,只是好多人遇到烦躁的问题就退缩了,我也是慢慢从坑里爬出来的,哈哈!!!继续…
在命令中运行mitmproxy报错:
其主要是因为windows不支持mitmproxy,因此我们此采用mitmdump(只能在命令里面看到抓包信息)和mitmweb(可以在网页里看到抓信息)进行抓包处理,本文采用mitmweb进行抓包,在命令行输入:mitmweb,可以看到已经运行了:
同时打开了个网站:
然后我们打开模拟器里的APP即可看到网站里的抓包信息
这样我们就获取了APP里的请求数据,接下来我们来实现数据的抓取并存储到数据库中。
首先在模拟器上安装得到APP,安装方法很简单,下载apk安装包,将其拖拽至模拟器上,则模拟器进行自动解析安装。
接下来需要我们写Python脚本来实现数据的抓取及存储,先依据第二步分析,打开得到APP,点击进入到电子书书籍列表模块,如下图所示:
然后查看web页面中的抓包信息,查看mitmweb前端页面显示的抓包数据信息,我们会发现,链接https://entree.igetget.com/ebook2/v1/ebook/list显示可到查看到书籍信息的json数据,记住此URL后续会用到:
获取到了请求的url链接,接下来我们在pycharm里编写爬虫脚本,以获得数据,根据崔大大的教程编写脚本会如下(博主保存为spider.py):
import json
from mitmproxy import ctx
import pymongo
my_cilent = pymongo.MongoClient("mongodb://localhost:27017/")
my_db = my_cilent["getBook"]
my_collection = my_db["books"]
def response(flow):
global my_collection
url = 'https://entree.igetget.com/ebook2/v1/ebook/list'
if flow.request.url.startswith(url):
text = flow.response.text
data = json.loads(text)
books = data.get('c').get('list')
for book in books:
data = {
'title': book.get('operating_title'),
'bookName': book.get('book_name'),
'bookIntroduce': book.get('book_intro'),
'currentPrice': book.get('current_price'),
'publishTime': book.get('publish_time'),
}
ctx.log.info(str(data))
my_collection.insert_one(data)
但是通过mitmweb -s spider.py运行后代码会报错:
具体原因我也不清楚,但是针对原始代码进行了相应的改动,将连接数据库的三行代码放入到了def函数内,具体代码如下所示:
import json
from mitmproxy import ctx
import pymongo
def response(flow):
my_cilent = pymongo.MongoClient("mongodb://localhost:27017/")
my_db = my_cilent["getBook"]
my_collection = my_db["books"]
# global my_collection
url = 'https://entree.igetget.com/ebook2/v1/ebook/list'
if flow.request.url.startswith(url):
text = flow.response.text
data = json.loads(text)
books = data.get('c').get('list')
for book in books:
data = {
'title': book.get('operating_title'),
'bookName': book.get('book_name'),
'bookIntroduce': book.get('book_intro'),
'currentPrice': book.get('current_price'),
'publishTime': book.get('publish_time'),
}
ctx.log.info(str(data))
my_collection.insert_one(data)
然后运行mitmweb -s spider.py不显示错误,然后重复上面的步骤:打开app、进入电子书栏目,进入书单列表,手动下拉(目前需要人手动下拉进行数据的刷新,后续可与appium结合起来,实现自动化的下拉),我们可以看到命令栏已经显示我们所需爬取的数据:
此时我们用可视化工具打开数据库,即可看到数据已保存至数据库中:
至此,我们采用mitmproxy抓包工具和夜神模拟器就实现了APP数据的简单抓取,目前是需要手动进行下拉刷新,后续采用自动化工具Appium进行数据的自动化抓取。
学习爬虫主要参考的崔大大的《Python3网络爬虫开发实战》,本此只是实现了APP数据的简单抓取,算是对APP数据爬虫的入门,针对此文后续还有更多的内容学习:
等等!
完结!!!!