0%

使用Appium爬取数据

简介

之前使用Selenium模拟谷歌浏览器爬取网页数据,现在使用Appium来模拟爬取app数据,这里以抖音为例子

步骤

  1. 安装 Appium
  2. 使用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即可

  1. 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('----------------------------------')