网络编程
位置:首页>> 网络编程>> Python编程>> Python使用Appium在移动端抓取微博数据的实现

Python使用Appium在移动端抓取微博数据的实现

作者:李元静  发布时间:2022-11-27 20:30:40 

标签: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软件,看看其登录界面。

Python使用Appium在移动端抓取微博数据的实现

如上图所示,我们不需要更改任何参数,只需要点击"Start Server v1.18.0"按钮,进行登录操作,登录之后,会出现如下界面。

Python使用Appium在移动端抓取微博数据的实现

这里,我们点击放大镜即可。点击之后,会出现步骤4的界面,我们需要在这里界面之中配置你需要操作或者说爬取的App。

比如,这里博主需要爬取微博App的数据,那么你需要下载微博App的.apk安装文件,然后通过反编译查找其包名与启动界面。具体反编译步骤如下:

Python使用Appium在移动端抓取微博数据的实现

如上图所示,我们需要通过压缩文件打开weibo.apk安装包,将AndroidManifest.xml拷贝出来。然后通过AXMLPrinter2.jar工具反编译AndroidManifest.xml,默认AndroidManifest.xml是乱码,反编译命令如下:


java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

然后,我们在打开其AndroidManifest.txt就可以看到微博的包名以及启动界面的Activity名称,具体如下所示:

Python使用Appium在移动端抓取微博数据的实现

这里,我们得到微博的包名为:com.sina.weibo,而微博的启动界面为:com.sina.weibo.MainTabActivity。接着,可以配置Appium软件,效果如下:

Python使用Appium在移动端抓取微博数据的实现

这里,读者可以直接点击Start Session,也可以点击保存Save As方便下一次直接使用。这里,博主先保存再点击Start Session(注意,deviceName是关于手机里面的设备名称,并不一定是你的手机名称):

Python使用Appium在移动端抓取微博数据的实现

可以看到,现在我们的微博手机界面已经在Appium软件上显示了。下面,我们可以使用上面的眼睛按钮,监听我们要操作的步骤,然后保存为一个动作链。

记录微博刷新动作

在实际的微博中,我们通过下拉刷新微博界面。不过,其实还可以通过点击底部的首页按钮进行刷新,记录操作并生成Python代码的步骤如下所示:

Python使用Appium在移动端抓取微博数据的实现

这里,我们需要先点击上面的眼睛记录我们后续的操作。然后你可以选中首页按钮,再点击最右边的Tap,即完成了首页的刷新动作,同时也会生成对应的操作代码:

Python使用Appium在移动端抓取微博数据的实现

默认生成的操作语言是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"获取到了微博的内容。图解效果如下:

Python使用Appium在移动端抓取微博数据的实现

运行之后,效果如下:

Python使用Appium在移动端抓取微博数据的实现

当然,这里之所以不同是因为我们手机运行代码将微博界面又重新启动了一遍。不过这是我们手机运行后的第一条微博的信息。

来源:https://blog.csdn.net/liyuanjinglyj/article/details/119874901

0
投稿

猜你喜欢

  • 数制转换即进制转换,指进制(二、八、十、十六进制)间的相互转换,计算机编程中较为常见。这里列举了python常见数制转换用法。1.进位制度P
  • 写个小教程,以期能让大家对jQuery有所了解,甚至喜欢上它(请不要怪我)。不废话,先说明我们的目的。我们知道,当代浏览器(modern b
  • thinkphp查询mssql数据库出现乱码的原因是ThinkPHP默认为UTF-8,而msmsql数据库是简体中文版,存储的是GB2312
  • 人们对于产品设计这类事情,往往容易眼高手低,在宇宙层面上夸夸其谈,却落不了地,只能飘着。真正到了自己动手的时候,才会发现问题很多,实践和理论
  • 简单的说,组织体系指的就是组织信息的方式。看了一堆拗口的定义后,我根据自己的理解画了下面这个图:从上图看出,同样的图形元素由于采用了不同的组
  •     1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
  • 与Channel区别Channel能够很好的帮助我们控制并发,但是在开发习惯上与显示的表达不太相同,所以在Go语言中可以利用sync包中的W
  • 模板过滤器定义:在变量输出时对变量的值进行处理作用:可以通过使用过滤器来改变变量的输出显示语法:{{变量 | 过滤器:'参数值1&#
  • 先来看一张简单的文档树很明显树的顶层节点是NodeA节点,接下来可以通过指定的合适节点移动到树中的任何点,结合以下的代码你可以更好的了解这棵
  • login.html <script language = "javascript" type = "t
  • Variant变量一般会将其代表的数据子类型自动转换成合适的数据类型,但有时候,自动转换也会造成一些数据类型不匹配的错误.这时,可使用转换函
  • 使用ewebeditor作为后台编辑器时,尤其是一个页面中使用多次该编辑器时,在提交数据时,可能会遇到数据被重复提交的情况。搜索找来一些解决
  • Tebsorflow开源实现多GPU训练cifar10数据集:cifar10_multi_gpu_train.pyTensorflow开源实
  • 1、实现效果2、实现步骤模块导入import os,sys,timefrom PyQt5 import QtCore,QtWidgets,Q
  • asp之家注:对于ACCESS数据库中的NULL,经常我们直接判断该字段是否为空用的是:name="",但是这个还不够,
  • 如何编写具有良好结构的CSS?如果在设计流程中缺乏"秩序"或"章法"是非常不利的,你得冒着风险去添加
  • 现在我将清除页面缓存的一些方法总结如下:1、在Asp页面首部加入<% Response.Buffer = True
  • PHP在运行时, 针对严重程度不同的错误,会给以不同的提示。 eg:在$a没声明时,直接相加,值为NULL,相加时当成0来算.但是,却提示N
  • python应用文件读取与登录注册功能,具体实现代码如下所示:#!/usr/bin/python3# -*- coding: utf-8 -
  • 代码和说明如下:<%Const ForReading = 1   &nbs
手机版 网络编程 asp之家 www.aspxhome.com