Android UiAutomator 爬取某房企二手房数据

Mar 22 2020

爬虫是一种批量快速高效获取网站数据的工具。随着前端反扒技术的不断迭代更新,使得想要爬取网站信息变得越发困难

因此现在爬虫学习成本越来越高,但不会专业的爬虫技术我们依然可以通过其他方式去爬取数据,今天我介绍一下在 Android 手机上爬取某绿中介客户端的二手房数据信息

思路是这样的,Android UiAutomator 可以定位控件,并且将其 text 信息获取下来,所以使用 uiautomatorviewer 先获取一份控件树分析一下

undefined

发现可以一次获取一屏的 item 组,再从组中取出每一个 item 去分别获取它的 text 信息,这很关键

继续观察 item,我们希望获取到这样几组信息

通过控件树查看,这些信息都可以定位并获取到

undefined

undefined

那么我们通过 resource-id 去定位到控件,再获取控件的 text 就能拿到当前房子的数据

接下来就是设计信息抓取的流程了

由于每一屏只能看到最多四条信息,因此获取完一屏,需要进行一个从底部到顶部的滑动操作,将新的页面展示到屏幕上,继续获取新数据,直到滑动到了最底部,则结束查找

实际编码时需要考虑三个问题:

  1. 处于屏幕最下方的 item 未完整露出来如何处理
  2. 从哪个位置开始滑动到哪个位置停止
  3. 如何判断见底了

问题一,现象是这样的

undefined

我们看到最后一个 item 没有显示全,因此获取不到户型,总价等数据,这里我的处理方式是如果能获取到标题但获取不到其他的数据,则进行一次屏幕滑动操作,再接着重新拿它的数据

问题二,从屏幕中部开始往上滑,效率太低,总是会有 item 被重复获取。因此从最后一个 item 开始滑动,并且终点坐标定在蓝色区域较好,不会让未获取的数据被覆盖掉

undefined

问题三,由于 item 的个数是动态的,因此我们无法直接确定要获取多少个,这里我的策略是通过重复值确认是否见底,也即如果在检索某个 item 时,这个 item 的信息被重复多次获取到,那么说明已经到底数据底部,可以结束流程

确认了流程,接下来就是定一下存储格式。由于 csv 格式比较简单,这里就通过写 csv 文件的方式进行数据保存

通过以上的分析,就可以开始编码了,相关的源码如果需要可以后台留言给我,这里展示一下爬取结果

undefined

上百条数据的爬取需要七八分钟的耗时,肯定是没办法跟网站爬虫比效率的,但,能拿到数据才是根本,哪怕是上万条数据,我们自动化的执行,晚上睡觉的时候让它自己跑,第二天就能拿到结果了