python爬虫二十一:app移动端数据抓取(一)

1、移动端app数据

1.1为什么要抓取移动端数据

①随着时代的发展,pc—>移动端—>大数据—>AI(人工智能未来)对于做数据分析、用户画像、市场调研来说仅仅参考PC端的数据是远远不够的。那么于此同时移动的数据就显得尤为的重要
②android基本布局
线性布局 linearLayout 2 相对布局 RelativelLayout 3 帧布局 FrameLayout 4 表格布局 TableLayout 5 绝对布局 AbsoluteLayout

1.2移动端抓取数据注意事项

①可能需要反编译,分成出加密算法抓取信息
②可能加固,需要脱壳
③需要破解各式各样的签名,证书,设备绑定方法,找到隐藏的加密算法

2、UIAutomator

2.1UIAutomator的简介

UIAutomator是google提供的用来做安卓自动化测试的一个java库,测试脚本只能用Java语言开发,而且测试脚本要打包成jar包或者apk包上传到设备上才能实现

2.1.1jar包

①JAR(Java ARchive)是将一系列文件压缩到单个压缩文件里,就象Zip那样。JAR文件是跨平台的,不必关心涉及具体平台的问题。
jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性以及方法。

2.1.2apk包

Android应用程序包(Android application package)一个APK文件内包含被编译的代码文件(.dex 文件),文件资源(resources), 原生资源文件(assets),证书(certificates),和清单文件(manifest file),通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

3、安卓的四大控件

3.1activity

①一个Activity通常就是一个单独的窗口
②Activity之间是通过Intent进行通信
③android应用中每一个activity都必须在androidManifest.xml配置文件中声明,否则系统不执行更无法识别该Activity

3.2service

3.2.1service用于在后台完成用户指定的操作

①start(启动):当应用程序组件(activity)调用startservice()方法启动服务时,服务处于start状态,一旦启动,服务可以在后台无限期运行,即使启动它的组件已经被销毁。
②bound(绑定):当应用程序组件(activity)调用bindservice()方法绑定到服务时,服务处于绑定状态

3.2.2start和bound的区别

①start启动服务是由其它组件调出startService()方法启动的,这导致服务的onStartCommand()方法被调用,当服务是start状态时,生命周期与它的组件无关,并且可以在后台无限期的运行,即使启动服务的组件已经被销毁,因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其它组件调用stopService()方法停止服务
②使用bound开启服务,bindService()会将调用者与服务绑定在一起,调用者一旦销毁,服务也就终止

3.2.3service的特点

Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

3.3content provider

①android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。
②只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。
③ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。
④开发人员不会直接使用ContentProvider类的对象,大多数是通过ContentResolver对象实现对ContentProvider的操作。
⑤ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由ContentProvider来管理。

3.4broadcast receiver

①你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
②广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。
③动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

4、adb的使用

4.1adb的简介

adb ( Android Debug Bridge)安卓调试桥,它是一个通用命令行工具,允许与模拟器实例或真机Android设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。
①Adb client 命令行程序用于从shell或脚本中运行adb命令
②Adb server是运行在PC的的一个后台程序
③Adbd 程序是一个在Android设备或模拟器系统中运行的后台进程,通过②完成与移动端的额交互完成相关操作

4.2adb的使用

4.2.1adb的安装

随便下载一个模拟器就会带有adb应用程序,将bin目录添加至环境变量,方便任意位置操作这里面的可执行文件

在这里插入图片描述
在这里插入图片描述

4.2.2adb的使用

在dos中输入adb就会开启pc后台中运行的adb server
查看连接设备,第一次输入时守护进程没有开启,他开启后再次输入,可以看到连接的设备为空,还没有连接任何移动设备
在这里插入图片描述
开启模拟机后就会连接(必须开启adb server才能连接设备)
在这里插入图片描述

4.2.3adb的常用命令

①adb dvices :查看adb连接了哪些设备
②adb kill-server :关闭服务
在这里插入图片描述

③adb install apk文件绝对路径 :安装app应用
下载apk文件
在这里插入图片描述
在这里插入图片描述

④adb shell pm list packages :查看包名
在这里插入图片描述

⑤adb uninstall 应用包名 :卸载应用
在这里插入图片描述

5、UIAutomator2

由于UIAutomator的测试语言只能用java语言开发,测试脚本也要打包成jar包或者apk包上传到设备上才能实现,不符合python的轻便,也不能用python写脚本测试,所以为python开发了一个UIAutomator库,让python可以做android的测试
u2的安装如下
在这里插入图片描述

5.1uiautomator2的优势

UI自动化编写采用Python,学习成本低
UI控件识别有专门的工具 weditor
环境搭建简单
UI自动化脚本运行稳定

5.2uiautomator2的执行流程

①在移动设备上安装atx-agent(守护进程),随后atx-agent启动u2服务(默认7912端口)进行监听
②在PC端来编写脚本(相当于发送HTTP请求到移动设备的server端)
③ 移动设备通过wifi或usb接收到了PC上发来的HTTP请求,执行定制的操作
运行环境:android4.4+、python3.6+
1、Uiautomator-server: 就是谷歌原声的 uiautomator
2、Atx-agent: uiautomator的守护进程
3、minicap和minitouch 中2个包是atx-agent增加远程控制功能的依赖
在这里插入图片描述

5.3uiautomator2的使用

①打开adb服务
②连接移动端
③初始化移动端python -m uiautomator2 init
在这里插入图片描述
在这里插入图片描述

5.3.1pycharm操控移动端的软件

在DOS中找到apk包名
方法一adb shell pm list packages
方法二 aapt dump badging apk文件的绝对路径
打开appd.app_start('包名')
关闭appd.app_stop('包名')

d.service('uiautomator').running() uiautomator运行状态
d.service('uiautomator').start() 启动uiautomator
d.service('uiautomator').stop() 停止uiautomator
d.app_install(data='apk地址') 安装app
d.app_current() 获取当前前台app的信息
d.app_stop('包名') 停止当前app
d.app_clear('包名') 清除缓存
d.app_uninstall('包名') 卸载app
d.app_list() 获取所有app的信息
d.app_stop_all() 停止所有app
d.app_uninstall_all() 卸载所有app

5.3.2pycharm中u2的基本操作

import uiautomator2 as u2

'''
1、通过wifi 172.17.100.15要在局域网中测试
2、通过usb
3、通过adb wifi ip+port
'''
# d = u2.connect_wifi('172.17.100.15')
d = u2.connect_usb('127.0.0.1:62001') #可以直接启动ATX守护进程
# print(d.info)
# print(d.device_info) # 查看守护进程的状态
# print(d.service('a').running()) # 开启了就为true没开启就为false
# d.service('name').start() # 开启守护进程,或者手动开启也可以
# print(d.service('name').running()) # 查看守护进程的状态
# d = u2.connect_wifi('172.17.99.15') # 无效的ip不能通过这个ip连接
# print(d.wlan_ip) # 这是通过ATX转化后的ip:172.17.99.15,模拟器是不对的真机是可以的
# 安装百度
# d.app_install(data='https://ip4095973748.mobgslb.tbcache.com/fs08/2020/09/24/11/120_b9a3e3f87a32db6a1e0366741deefa3b.apk?fname=QQ%E6%B5%8F%E8%A7%88%E5%99%A8&productid=2011&packageid=600982633&pkg=com.tencent.mtt&vcode=10778135&yingid=wdj_web&pos=wdj_web%2Fdetail_normal_dl%2F0&appid=44621&apprd=44621&iconUrl=http%3A%2F%2Fandroid-artworks.25pp.com%2Ffs08%2F2020%2F09%2F02%2F11%2F110_dfcdbbf1a14ea1c552ea8faf19317cb1_con.png&did=faaaa28ba09ab482dc9c400d838cfa78&md5=8136b6144bd4dce94ec756d9e51a55ba&ali_redirect_domain=alissl.ucdl.pp.uc.cn&ali_redirect_ex_ftag=5e6bf67d7726627063444f1515b3638a7b1160f8514c4c88&ali_redirect_ex_tmining_ts=1601006536&ali_redirect_ex_tmining_expire=3600&ali_redirect_ex_hot=100')
# d.app_start(package_name='com.baidu.searchbox') # 启动百度
# print(d.app_current()) # 获取前台运行app的信息返回的是package, activity, pid(正在开发)# print(d.current_app())跟前者一样
# d.app_stop('com.baidu.searchbox') # 关闭app
# d.app_uninstall(package_name='com.baidu.searchbox') # 卸载指定包名app
# print(d.app_list()) # 查看所有app的信息
# print(d.app_info(package_name='com.baidu.searchbox')) # 获取包名的详细信息
# d.app_clear(package_name='com.baidu.searchbox') # 清楚app缓存内存提高设备运行的效率
# d.app_stop_all() # 停止所有的app,有默认排除参数所以不会停ATX(u2)
# d.app_uninstall_all() # 卸载所有的app,有默认排除参数所以不会卸载ATX(u2)

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
回答: Appium是一个开源的自动化测试工具,也可以用于进行移动应用程序的爬虫使用Appium可以模拟用户在移动设备上的操作,比如点击、滑动等,从而获取移动应用程序中的数据。具体的操作步骤如下: 1. 在Windows虚拟环境下执行`pip install appium-python-client`命令,安装appium-python-client模块。 2. 启动夜神模拟器,并使用adb命令建立adb server和模拟器的连接。 3. 启动appium-desktop,点击start server启动appium服务。 4. 根据需要获取移动设备的型号、app包名称和进程名,可以通过adb shell命令获取。 5. 初始化并获取移动设备的分辨率。 6. 使用appium-python-client模块编写代码,实现控制移动应用程序进行相关操作,比如滑动、获取信息等。 以上是使用Appium进行移动应用程序爬虫的一般步骤,具体的实现还需要根据具体的应用程序和需求进行调整和编码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [《Python爬虫100例》复盘⑦,解决手机APP爬虫环境问题](https://blog.csdn.net/hihell/article/details/121289717)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [APP爬虫--appium提取数据](https://blog.csdn.net/qq_45176548/article/details/113200918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值