快捷搜索:

Python自动化爬取App数据

Python自动化爬取App数据

基础情况设置设置设备摆设摆设

版本:Python3

系统:Windows

必要安装:

image.png

1.JDK - Download JDK,Appium要求用户必须设置设置设备摆设摆设JAVA情况, 否则启动Seesion报错。

2.Appium - Download Appium, 安装历程请自行搜索。

3.Android SDK - Download SDK

4. Selenium - 建议应用低版本的Python Selenium库,在Chrome高版本可能会报错。例如:

pip3 install selenium==2.48.0

5. chromedriver.exe - Download Chromedriver, 确保版本要匹配, 然后将 .exe 法度榜样放在"..PythonPython36Scripts"目录下。

6. pymongo

pip3 install pymongo

7. MongoDB Server - Download MongoDB

爬取思路

爬取思路:

模拟登录

抓取动态

保存数据

Android SDK的安装与设置设置设备摆设摆设

打开Android Studio, 选择"Configure->SDK Manager->Apperance&Behavior->System Settings->Android SDK", 选择对应安卓机版本的SDK,如图:

Python自动化爬取App数据

此外,还必要将SDK所在路径添加到系统情况变量中,否则报错。

Desired Capabilites 参数

分手是:platfornName, deviceName, appPackage, appActivity。前两个可经由过程如下敕令获取, 条件是连接手机、打开USB调试:

adb devices -l

[图片上传掉败...(image-bc1b61-1553429216871)]

后两个参数请移步:获取appPackage和appActivity

开启安卓的" 开拓者选项、USB调试 "

测试之前,确保打开 开拓者选项、USB调试。开拓者模式确保调试法度榜样在手机安装帮助软件:Unlock, Appium Settings;USB调试主如果使用Appium内置驱动打开APP。此外,要维持屏幕常亮。

5. 节点ID或XPATH值获取

安卓微信节点获取,比拟较较轻易获取,比如获取"登录"ID值,启动Session后只需点击屏幕左侧安卓屏的登录按钮,中心就会自动定位到所在节点,最右侧还会显示该节点的所有属性。如图:

Python自动化爬取App数据

对付文本输入框,只必要点击最右侧的"send text"即可。

"是否匹配通讯录"

这里选择"否", 来由:从新登录进入微信后会自动加载本地数据,耗时较长,假如匹配通讯录石友,增添耗时,可能在TIMEOUT光阴内获取不到节点,导致法度榜样终止。我这里选择了"是", 如图:

Python自动化爬取App数据

同伙圈信息获取思路

获取当前显示的同伙圈每条状态对应的区块元素,遍历每个区块元素,再获取内部显示的用户名、正文、宣布光阴,代码如下:

# items存储当前页面所有宣布的同伙圈信息

items = self.wait.until(

EC.presence_of_all_elements_located(

每个ej9节点对应一条同伙圈数据

(By.XPATH, '//*[@resource-id="com.tencent.mm:id/ej9"]/android.widget.LinearLayout')))

for item in items:

try:

昵称

nickname = item.find_element_by_id('com.tencent.mm:id/b5o').get_attribute('text')

正文

content = item.find_element_by_id('com.tencent.mm:id/ejc').get_attribute('text')

日期

date = item.find_element_by_id('com.tencent.mm:id/eec').get_attribute('text')

处置惩罚日期

date = self.processor.date(date)

data = {

'nickname': nickname,

'content': content,

'date': date,

}

日期处置惩罚

日期处置惩罚的实现要领,代码如下:

class Processor():

def date(self, datetime):

"""

款式化光阴

:param date: 原始光阴

:return: 处置惩罚后光阴

"""

if re.match('d+分钟前', datetime):

minute = re.match('(d+)', datetime).group(1)

datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - float(minute) * 60))

if re.match('d+小时前', datetime):

hour = re.match('(d+)', datetime).group(1)

datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - float(hour) * 60 * 60))

if re.match('昨天', datetime):

datetime = time.strftime('%Y-%m-%d', time.localtime(time.time() - 24 * 60 * 60))

if re.match('d+天前', datetime):

day = re.match('(d+)', datetime).group(1)

datetime = time.strftime('%Y-%m-%d', time.localtime((time.time()) - float(day) * 24 * 60 * 60))

return datetime

完备代码

Python自动化爬取App数据

留意事变:

代码中所有节点都须提前经由过程 Appium新建Session获取(亲测同版本的微信中vivo_x7和Mi_8节点相同,另外机型未知)

建议应用高性妙手机测试(MI_8|MI_9等)

运行结果

Python自动化爬取App数据

您可能还会对下面的文章感兴趣: