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

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

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

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

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

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

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

appium简介的链接

自己给自己定的需求

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

环境准备

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

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

如果都打钩,就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方式获取。请参考下面链接。

appium元素定位

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

APP爬虫(1)想学新语言,又没有动力,怎么办?的更多相关文章

  1. python的第一个程序“Hello,World”,传闻要想学好新语言....

    传闻要想学好新语言,第一个程序必须是“Hello,World”...O(∩_∩)O哈哈~ 下面附上代码: # -*- coding:utf-8 -*- print("Hello,World& ...

  2. APP爬虫(2)把小姐姐的图片down下来

    APP爬虫(1)想学新语言,又没有动力,怎么办? 书接上文.使用appium在帖子列表界面模拟上划动作,捕捉不到列表的规律.上划结束后,列表只能获取到屏幕呈现的部分,而且下标还是从0开始的. 根据酸奶 ...

  3. Python爬虫工程师必学——App数据抓取实战 ✌✌

    Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...

  4. Python爬虫工程师必学APP数据抓取实战✍✍✍

    Python爬虫工程师必学APP数据抓取实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  5. Python爬虫工程师必学——App数据抓取实战

    Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  6. Kotlin新语言简介和快速入门知识点

    Kotlin新语言简介和快速入门知识点 简介:Kotlin是最近由JetBrains发布的一种基于JVM的编程语言,已经被Google宣布为开发Android App的一级语言Kotlin有着与Jav ...

  7. 为什么学Python语言,只需四步全面了解Python语言

    为什么学Python语言,只需四步全面了解Python语言每个时代都会悄悄犒赏会选择的人,Python现在风口的语言Python--第三大主流编程语言Python , 是一种面向对象的解释型计算机程序 ...

  8. 为什么43%前端开发者想学Vue.js

    根据JavaScript 2017前端库状况调查 Vue.js是开发者最想学的前端库.我在这里说明一下我为什么认为这也是和你一起通过使用Vue构建一个简单的App应用程序的原因. 我最近曾与Evan ...

  9. 结合jquery的前后端加密解密 适用于WebApi的SQL注入过滤器 Web.config中customErrors异常信息配置 ife2018 零基础学院 day 4 ife2018 零基础学院 day 3 ife 零基础学院 day 2 ife 零基础学院 day 1 - 我为什么想学前端

    在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ...

随机推荐

  1. 简单易懂的ftp脚本自动登录教程

    我在上上篇<nmon脚本--对Linux服务器的监控>的脚本中,使用了ftp的自动登录.结果有人询问,遂决定专门写一篇简单易懂的博客,来说明如何解决ftp的自动登录问题. 一.Window ...

  2. openlayers6结合geoserver实现地图属性查询(附源码下载)

    前言 之前写过一篇 openlayers4 版本的地图属性查询文章,但是由于是封装一层 js 代码写的,很多初学者看起来比较有点吃力,所以本篇文章重新写一篇地图属性查询文章,直接基于最新版本 open ...

  3. java之面向对象

    类的语法格式 public class Person{ //属性类的成员变量可以先声明,不用初始化,类成员变量具有初始值 String name; int age; //方法 public void ...

  4. HDU-6114

    車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数.他经过思考,得出了 ...

  5. CC1605&CC1604 usb3.0+FPGA 高速视频采集 双目相机测评

    CC1605&CC1604 usb3.0+FPGA 高速视频采集 双目相机测评 摄像头配置:ov5640.OV5642.mt9p031.mt9m001c12stm OV5640 xclk:24 ...

  6. 【Gitlab】371- GitLab从安装到全自动化备份一条龙

    原文地址[1]欢迎star 需求 1.在新服务器上安装并搭建好gitlab2.手动+自动将旧服务器上的gitlab备份3.手动+自动将gitlab备份包scp到新服务器上4.手动+自动恢复新服务器上的 ...

  7. 各大中间件底层技术-分布式一致性协议 Raft 详解

    前言 正式介绍 Raft 协议之前,我们先来举个职场产研团队的一个例子

  8. LRU算法与增强

    概要本文的想法来自于本人学习MySQL时的一个知识点:MySQL Innodb引擎中对缓冲区的处理.虽然没有仔细研究其源码实现,但其设计仍然启发了我. 本文针对LRU存在的问题,思考一种增强算法来避免 ...

  9. android studio 软件常见问题

    xml文件没有智能提示 在网上看到说是去掉省电模式就可以了 然后我试了一下并不能解决, 最终我是这么解决的

  10. return之为什么能够终止函数,代码演练

    ''' return 有终止函数的作用,下面通过执行到return x 以后, 就结束了程序的下一步执行,所以就没有往下面走,所以终端上也就只能 看到打印结果100,看不到打印呢 ''' def se ...