Python爬虫:使用Appium在移动端抓取微博数据
Posted 李元静
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫:使用Appium在移动端抓取微博数据相关的知识,希望对你有一定的参考价值。
使用Appium在移动端抓取微博数据
Appium是移动端的自动化测试工具,读者可以类比为PC端的selenium。通过它,我们可以驱动App完成自动化的一系列操作,同样也可以爬取需要的内容。
这里,我们需要首先在PC端安装Appium软件,安装下载的地址如下:
https://github.com/appium/appium-desktop/releases
安装软件的步骤非常简单,就与大多数软件安装步骤一样,这里不在赘述。
但是只安装Appium软件并不能操作手机App,还需要下载专业的android工具Android SDK,这里读者可以直接下载安装Android Studio即可,安装完成之后,Android SDK也就安装完成了。
基础的配置到这里就结束了。下面,我们来通过Appium软件操作手机App。
查找Android App的Package和入口
这里,博主主要介绍如何操作Android手机,感兴趣的可以自己查阅资料配置ios端。我们先来打开Appium软件,看看其登录界面。
如上图所示,我们不需要更改任何参数,只需要点击"Start Server v1.18.0"按钮,进行登录操作,登录之后,会出现如下界面。
这里,我们点击放大镜即可。点击之后,会出现步骤4的界面,我们需要在这里界面之中配置你需要操作或者说爬取的App。
比如,这里博主需要爬取微博App的数据,那么你需要下载微博App的.apk安装文件,然后通过反编译查找其包名与启动界面。具体反编译步骤如下:
如上图所示,我们需要通过压缩文件打开weibo.apk安装包,将AndroidManifest.xml拷贝出来。然后通过AXMLPrinter2.jar工具反编译AndroidManifest.xml,默认AndroidManifest.xml是乱码,反编译命令如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt
然后,我们在打开其AndroidManifest.txt就可以看到微博的包名以及启动界面的Activity名称,具体如下所示:
这里,我们得到微博的包名为:com.sina.weibo,而微博的启动界面为:com.sina.weibo.MainTabActivity。接着,可以配置Appium软件,效果如下:
这里,读者可以直接点击Start Session,也可以点击保存Save As方便下一次直接使用。这里,博主先保存再点击Start Session(注意,deviceName是关于手机里面的设备名称,并不一定是你的手机名称):
可以看到,现在我们的微博手机界面已经在Appium软件上显示了。下面,我们可以使用上面的眼睛按钮,监听我们要操作的步骤,然后保存为一个动作链。
记录微博刷新动作
在实际的微博中,我们通过下拉刷新微博界面。不过,其实还可以通过点击底部的首页按钮进行刷新,记录操作并生成Python代码的步骤如下所示:
这里,我们需要先点击上面的眼睛记录我们后续的操作。然后你可以选中首页按钮,再点击最右边的Tap,即完成了首页的刷新动作,同时也会生成对应的操作代码:
默认生成的操作语言是Java,你可以通过上图下拉选择自己需要的语言。这里,博主选择Python,毕竟讲解的是Python爬虫。
虽然上面的代码确实是操作手机App的代码,但是你直接copy到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"获取到了微博的内容。图解效果如下:
运行之后,效果如下:
当然,这里之所以不同是因为我们手机运行代码将微博界面又重新启动了一遍。不过这是我们手机运行后的第一条微博的信息。
本篇博文已经5000字了,后面起码还有2万字关于Appium的内容与实战。所以,博主会放到后面专门的一篇进行讲解,读者如果需要学习Appium,看完这篇文章能把启动配置任意App的效果实现,就非常不错了,毕竟饭要一口一口吃。
以上是关于Python爬虫:使用Appium在移动端抓取微博数据的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(127):使用Appium抓取移动数据--安装和配置Appium
Python爬虫编程思想(127):使用Appium抓取移动数据--安装和配置Appium
Python爬虫编程思想(128):使用Appium抓取移动数据--启动Appium服务
Python爬虫编程思想(132):使用Appium抓取移动数据--Appium Python Client API