简介
之前使用Selenium模拟谷歌浏览器爬取网页数据,现在使用Appium来模拟爬取app数据,这里以抖音为例子
步骤
- 安装 Appium
- 使用python驱动 Appium-Python-Client
1
| pip3 install Appium-Python-Client
|
3.使用Appium启动会话,并且获取要爬取数据的元素id,期间要设置以下参数,其中appPackage和appActivity可通过在windows环境下在dos中运行adb shell dumpsys window |findstr mCurrent命令获取
deviceName 通过adb devices -l 中的 model字段获取
1 2 3 4 5 6
| { "platformName": "Android", "deviceName": "vivo_X21UD_A", "appPackage": "com.ss.android.ugc.aweme", "appActivity": "com.ss.android.ugc.aweme.splash.SplashActivity" }
|
设置完参数启动session后下面获取要爬取的元素id即可
- Appium可以通过界面上的时间自动生成代码,我这里使用python来驱动,以下代码模拟滑动操作并且爬取了点赞数据,和用户名,注意一下几点
- Appium每次打开app都会默认删除app并且重新安装,我们在参数中设置”noReset”: True来禁止每次都重新安装软件
- Appium每次打开app都会重新安装apk,我们通过
“skipServerInstallation”: True,
“skipDeviceInitialization”: True
这两个参数来禁止每次安装apk,但是至少要进行一次安装
- appium.webdriver import webdriver 一定要导入appium包下的webdriver模块,不然无法选择元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import time
from appium import webdriver from selenium.webdriver.common.by import By
option = { "platformName": "Android", "deviceName": "vivo_X21UD_A", "appPackage": "com.ss.android.ugc.aweme", "appActivity": "com.ss.android.ugc.aweme.splash.SplashActivity", #不需要每次都重新安装软件 "noReset": True, #不要每次都安装apk "skipServerInstallation": True, "skipDeviceInitialization": True }
driver = webdriver.Remote('http://localhost:4723/wd/hub', option)
def getData(): like=driver.find_element(By.ID,'com.ss.android.ugc.aweme:id/aqg').text print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>') print(like) title =driver.find_element(By.ID,'com.ss.android.ugc.aweme:id/title').text print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>') print(title) driver.swipe(100, 1700, 100, 100, 1000)
time.sleep(10) try: while True: getData() print('=====================================') except: print('----------------------------------')
|