• Python自动化爬取App数据


    基本环境配置

    版本:Python3

    系统:Windows

    需要安装:

    1.JDK - Download JDK,Appium要求用户必须配置JAVA环境, 否则启动Seesion报错。

    很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:1097524789

    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,如图:

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

    Desired Capabilites 参数

    分别是:platfornName, deviceName, appPackage, appActivity。前两个可通过如下命令获取, 前提是连接手机、打开USB调试:

    adb devices -l
    

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

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

    测试之前,确保打开 开发者选项、USB调试。开发者模式确保调试程序在手机安装辅助软件:Unlock, Appium Settings;USB调试主要是利用Appium内置驱动打开APP。此外,要保持屏幕常亮。

    5. 节点ID或XPATH值获取

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

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

    "是否匹配通讯录"

    这里选择"否", 理由:重新登录进入微信后会自动加载本地数据,耗时较长,如果匹配通讯录好友,增加耗时,可能在TIMEOUT时间内获取不到节点,导致程序终止。我这里选择了"是", 如图:

    朋友圈信息获取思路

    获取当前显示的朋友圈每条状态对应的区块元素,遍历每个区块元素,再获取内部显示的用户名、正文、发布时间,代码如下:

    # 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
    

    完整代码

    注意事项:

    1. 代码中所有节点都须提前通过 Appium新建Session获取(亲测同版本的微信中vivo_x7和Mi_8节点相同,其余机型未知)

    2. 建议使用高性能手机测试(MI_8|MI_9等)

    运行结果

  • 相关阅读:
    由高度场求法线
    unity中的透视投影矩阵
    bindpose定义
    blinn-phong高光反向穿透问题
    fft ocean注解
    理顺FFT
    unity, 在image effect shader中用_CameraDepthTexture重建世界坐标
    unity, ComputeScreenPos 作用
    Lambert漫反射的BRDF
    VC++ MFC获取对话框上控件的位置
  • 原文地址:https://www.cnblogs.com/shann001/p/13087761.html
Copyright © 2020-2023  润新知