安卓模拟器自动抓取某红书晒单数据

因为最近有个需求,需要获取某红书的晒单数据,网站版也没有搜索接口,只能从app下手了,app的接口加密方式太难破解,所以不考虑破解接口,那就只剩下用adb命令模拟用户操作,然后用fiddler获取接口数据了。

先大致介绍一下步骤吧,首先下载模拟器,模拟器需要安装xposed框架和xposed框架下的JustTrustMe模块,主要是利用这个模块来绕过某红书ssl证书检测,因为不绕过就没办法获取晒单详情这个接口。下载fiddler,用fiddler作为代理服务器,在模拟器上设置代理,拦截某红书详情接口,再用fiddler的fiddlerScript将晒单详情接口数据保存到一个文本中。到这里就能抓取到详情数据了,接下来就是用adb命令去循环获取数据了。

一、下载模拟器

这里我用的是网易的mumu模拟器,本来开始我用的雷电模拟器,但是后面某红书加了个检测代理的东西,只要在模拟器用了代理就无法访问app了,所以换了mumu模拟器,这个模拟器添加代理某红书检测不到,大公司出的是要牛皮些。
模拟器需要安装xposed框架和框架里面的JustTrustMe模块,主要就是用这个模块来绕过app的ssl证书验证,不然无法获取详情接口数据。安装xposed框架的时候需要注意关闭模拟器设置里的应用兼容性,不然无法安装,安装完成后再开启,xposed版本也要注意,要根据安卓版本安装对应xposed版本,版本不对也无法安装。

二、下载fiddler

fiddler这真的是个神器,功能太强大了。下载完成后先开启https证书,这是fidder伪造的一个CA证书,开启过后才能获取https的请求
安卓模拟器自动抓取某红书晒单数据_第1张图片
然后开启端口,就用它默认的8888端口就行了
安卓模拟器自动抓取某红书晒单数据_第2张图片
开启端口后需要在window中也开启对应端口权限 window防火墙->高级设置->入站规则->端口->下一步->端口就填8888然后一路默认下一步就好了,规则名称随便填一个就行了。操作完成后重启下fiddler。

安卓模拟器自动抓取某红书晒单数据_第3张图片
安卓模拟器自动抓取某红书晒单数据_第4张图片
端口设置好了就在浏览器输入本机的IPv4地址+端口,例如 10.1.1.1:8888 然后就安装证书,证书名称随便写一个,安装完成后fiddler就能获取到你电脑上的所有请求啦
安卓模拟器自动抓取某红书晒单数据_第5张图片

三、模拟器获取app请求

windows安装好fiddler证书后也需要在模拟器也安装一个证书才能获取模拟器的请求,先设置模拟器的wifi代理,主机名填写本机IPv4地址,端口填写fiddler的端口,,然后浏览器输入上一步安装fiddler证书的那个地址,安装完成后重启模拟器再进入app就会看到fiddler窗口中出现app请求信息了
安卓模拟器自动抓取某红书晒单数据_第6张图片
安卓模拟器自动抓取某红书晒单数据_第7张图片
获取到接口数据后需要保存,就得用到fiddlerScript了,下面这段代码的意思就是fiddler中获取到了包含/api/sns/vi/note/的接口时就把接口返回数据覆盖到指定文本中(注意时覆盖,所以文本中只会存在最新的一个接口数据,需要连续保存要修改保存方式)

 static function OnBeforeResponse(oSession: Session) {
        if (m_Hide304s && oSession.responseCode == 304) {
            oSession["ui-hide"] = "true";
        }
        oSession.utilDecodeResponse();//消除保存的请求可能存在乱码的情况
        var curDate = new Date();
        var _filename = "D:/workspace/xiaotj/script/cron/data/detail.txt";
        
        if(oSession.fullUrl.Contains("/api/sns/v1/note/")) {
            
            var _logContent = oSession.GetResponseBodyAsString() + "\n\n\n";
            var _sw : System.IO.StreamWriter;
            
            _sw = System.IO.File.CreateText(_filename);
            _sw.Write(_logContent);
            
            _sw.Close();
            _sw.Dispose();
        }
    }

四、adb命令自动获取数据

先下载一个adb,然后在adb.exe所在目录调用下面命令就好了

常用adb命令
//连接mumu模拟器 mumu模拟器默认地址就是127.0.0.1:7555
adb connect 127.0.0.1:7555
//电源键
adb shell input keyevent 26
//菜单键
adb shell input keyevent 82
//home键
adb shell input keyevent 3
//返回键
adb shell input keyevent 4
//打开微信
adb shell am start -n com.tencent.mm/.ui.LauncherUI
//模拟点击 100 300是坐标
adb shell input tap 100 300 
//模拟滑动 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。
adb shell input swipe 300 1000 300 500 
//模拟输入 hello 此命令只支持英文
adb shell input text hello
//此命令支持中文,需要将中文转为base64格式,需要安装ADBKeyboard输入法,安装完成后设置为默认输入法,调用此命令就会输入红酒
adb shell am broadcast -a ADB_INPUT_B64 --es msg 'JXU3RUEyJXU5MTUy'

实现自动获取数据大致就是写一个无限循环调用adb命令,模拟真人去搜索想抓取的数据,然后去点击每个晒单,让fiddler获取到晒单详情请求数据,保存好数据后存入数据库,接着点击下一个晒单依次循环

大致步骤就是这样了,有什么问题可以留言,

你可能感兴趣的:(爬虫)