【Python】短视频大法?通过uiautomator2实现某音主播数据获得

文章目录

  • 前言
  • 一、采集页面
  • 二、点击流程拆解
    • 1、打开app
    • 2.搜索关键词,进入到主播列表页
    • 3、点击主播进入个人详情页
    • 4、提取详情页数据并返回上一页
    • 5、遍历列表页主播,依次点击进入采集
    • 6、滑动翻页
  • 三、完整代码
  • 总结


前言

大数据时代,哪里是流量洼地,哪里就有赚钱机会,但是想要有所收货,也得需要大量的数据支持!


一、采集页面

纯自动化的手段,实现某音主播数据的采集,不涉及接口逆向。已经使用过uiautomator2的同学可以跳过这篇基础文章。不了解的同学可以翻下我之前的文章,至少要明白uiautomator2做的什么事情。

app版本:23.4.0

采集页面如下:
【Python】短视频大法?通过uiautomator2实现某音主播数据获得_第1张图片

二、点击流程拆解

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秒,待新的列表也展示出

【Python】短视频大法?通过uiautomator2实现某音主播数据获得_第2张图片

总结

代码只提取了主播名称和粉丝数信息,需要提取哪些内容可以直接根据ID或xpath路径获取到,理论上可见即可采。需要注意的是,代码中的等待时间取决于设备是否卡顿,网络是否流畅等因素。

另外,执行代码前要确保app版本正确,设备序列号是否修改。

你可能感兴趣的:(徐浪老师大讲堂,python,音视频,android)