影刀2023终竞赛-操作题五:美团app数据抓取
评论
收藏

影刀2023终竞赛-操作题五:美团app数据抓取

经验分享
千里
2024-02-08 09:42·浏览量:2152
千里
影刀见习开发者
发布于 2024-02-08 09:422152浏览

演示视频点击链接

公众号原文地址

这一题要求全部xpath写,所以就没捕获元素的环节,xpath就在具体逻辑上一块讲。

1.连接手机。

影刀能调通手机,这个没什么好讲的。

2.打开美团app。

我这个的做法,就是先给手机滑到最左边,就是搜索屏的位置。

然后再往右滑,看看有没APP叫美团,有就点进去,然后结束循环。

搜索屏的xpath是

//*[@resource-id='com.hihonor.hiboard.feature_person:id/editSearch']

其实这个resource-id,ui树打出来看不见,是从捕获元素里偷的。

找美团app名字的xpath就比较简单

//*[@text='美团']

不管你是什么,名字叫美团,点就完事了


3.点击周边旅游、景点。

上图里滑动图标框的xpath

//*[@resource-id='com.sankuai.meituan:id/native_viewpager']

周边旅游的xpath

//*[@resource-id='com.sankuai.meituan:id/native_viewpager']//*[@content-desc='周边旅游']

景点的xpath

//*[@text='景点']

这部分最需要注意的是滑动图标框的参数,把默认的800改成400,可以避免有时候无法滑动成功。

4.核心流程

标题xpath

//*[contains(@text,'条评价')]/../../../*[1]/*[1]

评分xpath

//*[contains(@text,'条评价')]/preceding-sibling::*[1]/*[1]

评价数

//*[contains(@text,'条评价')]

距离

//*[contains(@text,'条评价')]/../../following-sibling::*[1]//*[contains(@text,'距你')]


这个原理就是以评价数为锚点,然后找到其他几个参数。

然后我们不断小拉,获取新的数据。

这里要注意,要把滑动时间从默认的800改成1800,避免有东西被滑漏了。

而滑动的时候也会出现几个问题:

4.1 数据重复的问题。

将标题作为唯一性值,写入一个列表,每次进行对比。

4.2 标题无法获取

滑动适合,第一个景点可能刚好卡一半,这样子捕获的标题内容就是空。

我们就需要对标题为空的进行过滤,不写入。

而这个标题也是这几个xpath里最不稳定的。

之前我的写法是按前节点索引。但是像“妈祖阁”这个景点,他中间节点就比其他景点少。

现在的写法就是找到共同的父元素,然后标题是第一个节点。

4.3距离无法获取

其实这个问题类似于4.2

这种问题会出现在最后一个节点,刚好把“距你**km”卡没了。

这个处理的更粗暴点,直接try写入,不行就跳过。

4.4循环的问题。

计算标题的相似元素有几个,然后for循环,一对一。虽然感觉不是非常严谨,但是多次测试,也没任何问题。

4.5中断执行

中断有两种情况,一个是题目要求的,到达20次,循环的适合就持续判断标题总列表的数量,到达20就直接中断。

还有一种,就是列表到底了。

这种情况就是循环相似元素之前,b=0,如果有新的写入出现,b=1

在循环结束后,如果b==0,那么说明已经没有新的景点,直接中断循环。


这道题主要还是在调试xpath的时间上,手机xpath调试太麻烦了。

OK,如上就是我的整个思路逻辑。欢迎讨论交流。

收藏6
全部评论1
最新
发布评论
评论