Python使用Appium在移动端抓取微博数据的实现
本文介绍如何利用Appium配合Python实现移动端微博数据的自动化抓取。内容涵盖Appium与Android Studio的安装配置,通过反编译APK获取包名与Activity,录制操作生成Python代码,以及使用Appium-Python-Client库提取具体微博内容的完整流程。
使用Appium在移动端抓取微博数据
Appium是一款专注于移动端的自动化测试工具,其功能定位类似于PC端的Selenium。借助该工具,开发者能够驱动移动应用程序执行一系列自动化操作,进而实现对目标应用内数据的抓取。
首先,需要在个人电脑端完成Appium软件的安装,官方下载地址为:https://github.com/appium/appium-desktop/releases
软件安装过程较为简单,遵循常规软件安装步骤即可,此处不再详细展开说明。
仅安装Appium软件尚无法直接操作手机应用,还需下载并配置专业的Android开发工具Android SDK。建议读者直接下载安装Android Studio,安装完成后,Android SDK即同步配置完成。
基础环境配置至此结束。接下来,我们将演示如何通过Appium软件对手机应用进行操作。
查找Android App的Package和入口
本文主要介绍Android手机的操作方法,对iOS端感兴趣的读者可自行查阅相关资料进行配置。首先启动Appium软件,观察其初始登录界面。

如上图所示,无需修改任何参数,直接点击“Start Server v1.18.0”按钮即可启动服务。启动成功后,界面将切换至如下状态。

点击界面上的放大镜图标,进入步骤4所示的配置界面。在此界面中,需要配置待操作或待抓取数据的具体App信息。
例如,若需抓取微博App的数据,首先需下载微博App的.apk安装包,随后通过反编译手段查找其包名(Package Name)与启动界面Activity。具体反编译步骤如下:

如上图所示,需通过压缩软件打开weibo.apk安装包,将AndroidManifest.xml文件拷贝出来。接着使用AXMLPrinter2.jar工具对AndroidManifest.xml进行反编译,因为默认情况下该文件显示为乱码,反编译命令如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
随后,打开生成的AndroidManifest.txt文件,即可查看到微博的包名以及启动界面的Activity名称,具体信息如下所示:

根据上述步骤,我们获取到微博的包名为:com.sina.weibo,而微博的启动界面Activity为:com.sina.weibo.MainTabActivity。基于此信息,配置Appium软件,效果如下:

配置完成后,读者可直接点击Start Session启动会话,也可点击Save As保存配置以便下次直接使用。此处建议先保存配置再点击Start Session(注意:deviceName参数对应的是手机设备内的名称,并非手机品牌名称):

此时,Appium软件界面上已显示微博手机应用界面。接下来,可利用上方的眼睛按钮监听操作步骤,并将其保存为动作链。
记录微博刷新动作
在实际使用微博时,通常通过下拉操作刷新界面。然而,点击底部“首页”按钮同样可实现刷新功能。记录该操作并生成Python代码的步骤如下所示:

首先,点击上方的眼睛图标以记录后续操作。选中“首页”按钮后,点击最右侧的Tap按钮,即可完成首页刷新动作的记录,同时系统会自动生成对应的操作代码:

默认生成的操作语言为Java,可通过上图下拉菜单选择所需语言。鉴于本文讲解的是Python爬虫,此处选择Python作为生成语言。
虽然上述代码确实是操作手机App的代码,但若直接复制到Python编辑器中运行将会报错。因此,需要安装Appium-Python-Client包:
pip install Appium-Python-Client
安装完成后,通过“from appium import webdriver”语句引入开发包,即可利用上述代码进行App爬虫或一系列动作链的操作。
接下来,将刚才通过Appium录制的操作全部转换为代码形式,具体代码如下所示:
from appium import webdriver
import time
server="http://localhost:4723/wd/hub"
desired_caps = {
"platformName": "Android",
"deviceName": "liyuanjing",
"appPackage": "com.sina.weibo",
"appActivity": "com.sina.weibo.MainTabActivity",
}
driver=webdriver.Remote(server,desired_caps)
time.sleep(10)
el2 = driver.find_element_by_accessibility_id("首页")
el2.click()
如上代码所示,我们实现了通过软件操作App的全部步骤。不过,这里存在一个小问题:由于打开App首次通常需要授予权限,而博主在录制时手动关闭了权限请求,因此未录制该步骤。
读者可自行将授予权限的步骤也录制进去,从而实现全自动操作。此处作者为简化演示,未进行该步骤的录制。
爬取微博第一条信息
通过上述刷新步骤,我们重新获取了微博首页的内容。现在,我们通过代码来获取首页第一条微博的具体内容。先查看相关代码:
from appium import webdriver
import time
server = "http://localhost:4723/wd/hub"
desired_caps = {
"platformName": "Android",
"deviceName": "liyuanjing",
"appPackage": "com.sina.weibo",
"appActivity": "com.sina.weibo.MainTabActivity",
}
driver = webdriver.Remote(server, desired_caps)
time.sleep(10)
descs = driver.find_element_by_id("com.sina.weibo:id/contentTextView")
print(descs.get_attribute("content-desc"))
此处,我们通过ID定位到第一条微博的控件,并通过其属性“content-desc”获取到了微博的具体内容。图解效果如下:

运行代码后的效果如下:

当然,此处显示结果不同是因为运行代码时手机重新启动了微博界面。这显示的是运行代码后获取到的第一条微博信息。
到此这篇关于Python使用Appium在移动端抓取微博数据的实现的文章就介绍到这了,更多相关Python Appium抓取微博数据内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









