文章目录
- 前言
- 一、采集页面
- 二、点击流程拆解
- 1、打开app
- 2.搜索关键词,进入到主播列表页
- 3、点击主播进入个人详情页
- 4、提取详情页数据并返回上一页
- 5、遍历列表页主播,依次点击进入采集
- 6、滑动翻页
- 三、完整代码
- 总结
前言
大数据时代,哪里是流量洼地,哪里就有赚钱机会,但是想要有所收货,也得需要大量的数据支持!
一、采集页面
纯自动化的手段,实现某音主播数据的采集,不涉及接口逆向。已经使用过uiautomator2的同学可以跳过这篇基础文章。不了解的同学可以翻下我之前的文章,至少要明白uiautomator2做的什么事情。
app版本:23.4.0
采集页面如下:
二、点击流程拆解
1、打开app
代码如下(示例):
import uiautomator2 as u2
d = u2.connect('18803bf5') # 设备对象
d.app_start(‘com.ss.android.ugc.aweme’, use_monkey=True)
2.搜索关键词,进入到主播列表页
代码如下(示例):
# 点击首页搜索
d(resourceId="com.ss.android.ugc.aweme:id/h9g").click()
# 输入关键词 美食
d(resourceId="com.ss.android.ugc.aweme:id/et_search_kw").set_text('美食')
# 点击搜索
d(resourceId="com.ss.android.ugc.aweme:id/tof").click()
# 点击用户
d(resourceId="android:id/text1", text="用户").click()
该处使用的url网络请求的数据。
3、点击主播进入个人详情页
d.xpath(‘//*[@resource-id=“com.ss.android.ugc.aweme:id/jt_”]/android.widget.FrameLayout[1]’).click()
4、提取详情页数据并返回上一页
# 提取主播名称
user_name = d(resourceId="com.ss.android.ugc.aweme:id/l0p").get_text()
# 提取粉丝数
fans_num = d(resourceId="com.ss.android.ugc.aweme:id/uh+").get_text()
# 返回列表页
d.press('back')
5、遍历列表页主播,依次点击进入采集
# 列表页展示主播数量
user_num = len(d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/jt_"]/android.widget.FrameLayout').all())
for i in range(1, user_num+1):
d.xpath(f'//*[@resource-id="com.ss.android.ugc.aweme:id/jt_"]/android.widget.FrameLayout[{i}]').click()
# 重复步骤4操作
6、滑动翻页
#从下向上滑动
d.swipe(0.498, 0.854, 0.52, 0.153)
三、完整代码
import time
import uiautomator2 as u2
d = u2.connect('18803bf5') # 设备序列号
d.app_start('com.ss.android.ugc.aweme', use_monkey=True)
time.sleep(10) # 等待app启动完成
d(resourceId="com.ss.android.ugc.aweme:id/h9g").click()
time.sleep(5) # 等到搜索入口显示
d(resourceId="com.ss.android.ugc.aweme:id/et_search_kw").set_text('美食')
d(resourceId="com.ss.android.ugc.aweme:id/tof").click(timeout=3)
d(resourceId="android:id/text1", text="用户")
for _ in range(10): # 设置翻页10次结束
user_num = len(d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/jt_"]/android.widget.FrameLayout').all())
for i in range(1, user_num+1):
d.xpath(f'//*[@resource-id="com.ss.android.ugc.aweme:id/jt_"]/android.widget.FrameLayout[{i}]').click()
time.sleep(5) # 等待主页加载完成
user_name = d(resourceId="com.ss.android.ugc.aweme:id/l0p").get_text()
fans_num = d(resourceId="com.ss.android.ugc.aweme:id/uh+").get_text()
d.press('back')
time.sleep(2)
d.swipe(0.498, 0.854, 0.52, 0.153)
time.sleep(2) # 滑动完成后主动等待2秒,待新的列表也展示出
总结
代码只提取了主播名称和粉丝数信息,需要提取哪些内容可以直接根据ID或xpath路径获取到,理论上可见即可采。需要注意的是,代码中的等待时间取决于设备是否卡顿,网络是否流畅等因素。
另外,执行代码前要确保app版本正确,设备序列号是否修改。