毒(得物)APP历史购买数据抓取

最近朋友炒鞋子,要抓取毒上的历史购买数据做参考。H5的页面跟app不一样,正好少了历史购买数据这块,只好通过APP来想办法了。下面是基于app操作的思路。

 

毒的2个主要页面,通过adb命令可获取。

usb连接手机后,打开毒app相关的页面,在电脑上执行:

adb shell "dumpsys window | grep mCurrentFocus"

获取2个主要activity界面:

产品详细页: com.shizhuang.duapp/com.shizhuang.duapp.modules.product.ui.activity.ProductDetailActivity

历史售价页:com.shizhuang.duapp/com.shizhuang.duapp.modules.product.ui.activity.SoldListActivity

先用fiddler截获的了试试,得到了获取历史购买数据的API,如下:

https://app.poizon.com/api/v1/app/product/ice/lastSoldList?X-Auth-Token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

直接用这个api带参数试了试,结果显示提示“签名认证出错”。通过jadx反编译了apk文件,涉及太多token和sign,太复杂,改用识别截图方式进行。

首先把app打开到商品列表页面,如下:

采用“adb shell /system/bin/screencap -p /sdcard/screenshot.png“和”adb pull /sdcard/screenshot.png e:\temp“把上图截屏到电脑上,然后通过windows的图画打开,确定商品点击区域的像素坐标,比如(350,420)是第一列第一排的商品坐标。

采用“adb shell input tap 350 420”,模拟点击,打开商品详情页,历史价格不在第一屏。

采用“adb shell input swipe 250 900 300 200”往上滑动,再截屏如下,看到了最近购买:

采用“adb shell input tap 1000 1200”,模拟点击“最近购买”后“全部”所在区域,进入历史购买列表页。

再进行截屏保存到电脑指定目录,然后通过

“tesseract screenshot.png scre -l chi_sim“进行ocr处理,把图片上的文字识别出来,保存到sre文本文件中

内容如下:

Air Jordan 1 Mid 丝 绸 伯 爵

,dx8 42.5 码 #1099 2 分 钟 前

导 肖 *9 43 码 #1099 2 分 钟 前

刑 买 *J 40.5 码 #1219 7 分 钟 前

勇 大 *g 43 码 #1099 20 分 钟 前

雷 文 <z 43 码 #1089 23 分 钟 前

惧 蔚 * 一 41 码 #1199 24 分 钟 前

象 a:5 42.5 码 #1099 25 分 钟 前

凶 绅 *a 40.5 码 #1219 27 分 钟 前

回 年 * 酒 44 码 #989 31 分 钟 前

弗 国 * 霖 41 码 #1199 32 分 钟 前

回 年 * 酒 44 码 #989 38 分 钟 前

园 dxc 40.5 码 #1249 46 分 钟 前

畹 爱 *P 42.5 码 #1099 51 分 钟 前

霁 n*xz 42 码 #1149 58 分 钟 前

主要的历史价格内容都识别出来,文本内容就比较好处理了。

  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
你提供的代码有几处问题,请注意以下修改: 1. `app.dpisin` 和 `app.apisin` 函数是不存在的,我假设你想使用 `sin` 函数。在 MATLAB 中,`sin` 函数的参数应为弧度制而非角度制。因此,你需要将 `app.theta` 转换为弧度制,可以使用 `deg2rad` 函数进行转换。 2. 在计算 `app.x2` 的时候,表达式 `(sin(app.alpha)./app.alpha).^2` 可能会产生除以零的错误。你可以通过添加一个条件来避免这个问题,例如: ```matlab app.x2 = (sin(app.alpha) ./ app.alpha).^2; app.x2(app.alpha == 0) = 1; % 处理 app.alpha 为零的情况 ``` 3. 在最后绘制图形时,你使用了 `imshow` 函数显示图像。然而,根据你的代码逻辑,`app.II` 是一个二维矩阵,不是一个图像。你可以考虑使用 `imagesc` 函数来绘制矩阵的热图,或者使用 `plot` 函数来绘制一维图形。 根据以上修改,请参考下面的代码: ```matlab app.x = linspace(-app.H/2, app.H/2, app.ScreenX); app.theta = atan(app.x / app.L); app.theta = deg2rad(app.theta); % 将角度转换为弧度 app.beta = sin(app.theta) / app.lambda; app.alpha = sin(app.theta) / app.lambda; app.x1 = cos(app.beta).^2; % 干涉项 app.x2 = (sin(app.alpha) ./ app.alpha).^2; % 衍射项 app.x2(app.alpha == 0) = 1; % 处理 app.alpha 为零的情况 app.I = app.x1 .* app.x2; app.II = repmat(app.I, [app.ScreenY, 1]); % 使用 imagesc 显示热图 imagesc(app.UIAxes, app.x, 1:app.ScreenY, app.II); colorbar(app.UIAxes); % 可选:显示颜色条 app.I0 = app.II(501, :); % 绘制一维图形 axis(app.UIAxes2, [-0.0018, 0.0018, 0, 1]); plot(app.UIAxes2, app.t, app.I0); ``` 请注意,以上代码仅修改了你提供的部分代码,并未考虑整个程序的完整性和正确性。具体的代码调整可能还需要根据你的实际需求进行进一步调整和完善。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值