【实战案例】APP京东JD商品数据自动化爬取
前言
有客户找到我,需求是爬取JD京东APP中所有的折扣数据。借这个案例给大家分享一下开发思路。

需求分析
-
支持多设备多任务排队执行 -
支持可视化商品爬取数据管理 -
数据只存在app,协议逆向对抗风控成本高,选择自动化爬取比较稳妥的方式。 -
考虑本地或者服务器维护成本
框架选型
1. autojs
源框架不支持各大厂平台,衍生分支面临跑路和收费的情况,暂不考虑。
2. 冰狐
支持安卓,Sass多租户平台,支持设备管理和平台暴露API对接,基本功能不收费。首选。
系统架构

-
冰狐提供获取设备列表、执行设备脚本API接口,商品系统调用接口。 -
冰狐接收到执行设备脚本接口调用,实际调度设备执行脚本。 -
设备数据采集完成上报数据到商品系统。
结果
部分核心代码
functionmain(goodId, deviceId, ip, port) {let res = null; backAppHome()// 更新设备状态为忙碌 httpPost("http://"+ip+":"+port+"/api/devices/status", {"id":deviceId, "workStatus": "繁忙"}, 'json');if(launchApp("com.jingdong.app.mall") == 1) {console.log("启动成功") waitForLoad("id:com.jingdong.app.mall:id/h8", 20000)if(switchPage("id:com.jingdong.app.mall:id/h8", "id:com.jd.lib.search.feature:id/oe").length > 0) {let input = findView('id:com.jd.lib.search.feature:id/a0x')if (input.length > 0) {console.log("输入") setClipboardData(goodId) click('id:com.jd.lib.search.feature:id/a0x', {isLongClick: true, afterWait: 1500});// waitForLoad("txt:粘贴", 5000, true) click("txt:粘贴", {root: "txt:粘贴", afterWait: 1000}); click('txt:搜索', {click: true, afterWait: 1000})let comp = waitForLoad("txt:一键领取|txt:去购买|txt:客服|txt:查看商品|id:com.jd.lib.search.feature:id/a7e", 60000)if (comp.length > 0 && comp.view[0].text != "客服") {console.log("进入商品首页")let btn = findView("txt:一键领取|txt:去购买|txt:查看商品")if (btn.length < 1) {// 兼容id搜索 btn = findView("id:com.jd.lib.search.feature:id/a7e") }let pickCouponBtn = btn.views[0] gestureClick(pickCouponBtn.left + (pickCouponBtn.width / 2), pickCouponBtn.top + (pickCouponBtn.height / 2), {}); waitForLoad("txt:客服", 60000) } res = {"goodId": goodId,"goodInfo": parseData() }console.log(res)let ret = httpPost("http://"+ip+":"+port+"/api/products/goodsInfo", res, 'json');console.log('ret:' + ret); } } backAppHome()// exitApp() } else {console.log("启动失败") }// 更新设备状态为空闲 httpPost("http://"+ip+":"+port+"/api/devices/status", {"id":deviceId, "workStatus": "空闲"}, 'json');return res}
商品数据页
支持模拟器、真机多设备多任务执行采集
设备信息页
支持从冰狐系统中同步设备,脚本运行实时更新工作状态。

系统配置页
设置商品上报ip和端口,支持本地网络/服务器运行。冰狐token和采集模式设置

夜雨聆风