欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

APP爬虫(1)想学新语言,又没有动力,怎么办?

程序员文章站 2022-06-24 09:07:46
最近Python和GO语言很火,想学但是只能看得懂21天精通这种级别的教程。公司的项目暂时不会上py或go的技术栈,给的薪资福利待遇还可以,暂时又不想辞职。没有项目实战经验,完全看不懂大神写的干货,怎么办? 既然没有别人给我们定目标,我就给我自己定一个目标。 我在手机上发现一个卖qqyp的app叫t ......

最近python和go语言很火,想学但是只能看得懂21天精通这种级别的教程。公司的项目暂时不会上py或go的技术栈,给的薪资福利待遇还可以,暂时又不想辞职。没有项目实战经验,完全看不懂大神写的干货,怎么办?

APP爬虫(1)想学新语言,又没有动力,怎么办?

既然没有别人给我们定目标,我就给我自己定一个目标。
我在手机上发现一个卖qqyp的app叫touch,里面有个社区经常有人发帖讲述自己chg和yp的经历,配图都是这样风格的(但不局限于此),just like this!

APP爬虫(1)想学新语言,又没有动力,怎么办?

所以我的目标是要把这些内容连同图片都爬到我的硬盘里。

web页面里的内容我们都会爬取,无非就是用curl或者wget等工具实现http请求嘛,那么问题来了app里的内容如何爬取?

一位测试同学曾和我说过,某些web页面加载过程比较复杂,所以需要使用selenium这类测试框架,selenium是模拟了浏览器加载页面的过程,并可以在页面加载完成后通过页面元素来断言测试用例是否通过。

既然web的测试框架可以获取到页面的元素,那么app的测试框架是不是也能获取到app指定控件(图片)的属性(url)呢?顺着这个思路我在百度里谷歌了一下,发现了appium这个工具。

appium有很强大的功能,具体请参看下面链接。

自己给自己定的需求

使用python编写程序,通过appium操作安卓虚拟机,打开指定app并进入帖子页面,循环获取帖子内容。

环境准备

  1. 安装java python nodejs环境。
  2. 安装androidsdk。
  3. 安装appium。
  4. 安装genymotion(安卓虚拟机)。
注:本人电脑为mac,1中的软件可以使用brew安装,234的软件请到各自的官网下载安装,如果下载速度较慢,需要fq。

appium安装完成后使用appium-doctor --android命令验证

APP爬虫(1)想学新语言,又没有动力,怎么办?

如果都打钩,就ok;如果有叉请自行检查环境变量相关配置。本人是在本地搭建的上述环境,没有使用docker。因为无论使用安卓虚拟机还是真机,docker连接起来都比较麻烦。

用真机手机热,用虚拟机电脑热,抓到内容本人热。

我们需要appium完成的功能:

  1. 打开app。
  2. 欢迎页面跳过后点击按钮进入帖子列表页面。

社区->查看全部->圈子列表->帖子列表

  1. 进入帖子详情界面,点击右上角只看楼主
  2. 获取帖子标题、内容。
  3. 获取每条回复内容,下滑循环此过程。

需求给自己提好了,开始code。appium选择了client/server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的。我们对python不熟,所以这里用python来撸代码,以此熟悉一下python的语法。

初始化获取driver相关参数:platformname、devicename、apppackage、appactivity等。请参考下面链接。

platformname写android

查看devicename

查看apppackage和appactivity

获取app界面上元素对象,可以通过xpath、id方式获取。请参考下面链接。

代码撸到这里遇到了第一个坑,帖子详情页的回复是列表形式呈现,没有id。如果使用xpath方式获取只能通过下标来定位,但是安卓只会将屏幕内的元素按下标呈现,滑动到屏幕外的元素就无法通过下标找到了?这可怎么办!

APP爬虫(1)想学新语言,又没有动力,怎么办?

APP爬虫(1)想学新语言,又没有动力,怎么办?