selenium是web端的自动化,appium是app端的自动化,它继承了webdriver(也就是selenium 2)
Appium入坑前必看,附爬虫心得
Appium入坑前必看,附爬虫心得
前言:
首先声明一点,在爬任何数据的时候,一定不要先考虑用Appium,
个人建议开始爬虫前正确的做法应该是:
1.去百度和谷歌搜下这个网站有没有人分享出你要爬数据的API
2.看看电脑网页有没有你要的数据,调查下好不好拿,不管好不好拿,也不要急着就开爬
3.看看有没有电脑能打开的手机网站,一般格式为http://m.xxx.com或http://mobile.xxxx.com,有的话可以用F12检查抓下包,看下抓取难易程度
4.看看有没有手机App,抓下App的包,看能不能抓到接口
5.抓下公众号和小程序的包,看能不能抓到接口
以上调查完成后,再去确定你要选择的爬取方式。
为什么这么说呢,你有没有遇到过这种情况,拿着电脑网站就开爬,搞了好几天终于搞定了反爬和加密参数,突然发现手机或者小程序能抓到现成的接口?或者突然发现这个网站直接有公开的接口。
然后你下次就会按我说的做了,哈哈哈。
其次:
Appium不是爬虫工具(封面图上写的有),而是爬虫辅助工具,大多数情况下需要和抓包工具配合完成爬虫!!!
接下来说下Appium的优缺点。虽然有点啰嗦,但是真的有干货,都是些踩过的坑,还是希望大家能耐心看完,如果实在懒得看,就看加粗的黑字就行。
先说缺点,缺点比较多:
- 慢
- 慢
- 慢
- 慢
- ...
- ...
- ...
- 慢
好了说完了。
哈哈哈,其实Appium也很冤,它是有本事点击的像光速一样快的,可是因为连的是硬件,硬件反应完它才能进行下一步操作,所以硬件性能越好,它越给力,反之,手机打开个抖音都卡半天,网速一秒10K,让它给你一分钟抓几百上千个视频?Appium也是委屈巴巴。
什么?要拿它跟Request,Scrapy比速度?来来来,这个加密参数来手写下,这个反爬来搞定下,Appium根本不需要考虑加密的问题,反爬的话也相对简单,因为你是模拟人滑动,除非你访问太过异常,少部分软件可能会有些限制。
说优点之前,先说说Appium爬虫的思路。
我当初之所以选择用Appium,是因为那时候要爬抖音无水印视频,抓包后发现抖音的加密算法太难了,本事有限,暂时破解不了,网上一时也没找到现成的JS破解代码。
我又比较懒,偶然发现一款抓包工具可以执行python脚本,所以就想到抓包,我只需要写几行代码,让Appium代替我滑动手机,甚至这一步可以跳过,我直接手动滑动,一边刷抖音的同时,让手机自己生成加密后的参数去请求服务器,让抓包工具去执行Python脚本,劫持服务器返回的视频资源就行了,这样省时省力,也不用把大把时间浪费在破解JS身上。
虽然速度没有request和Scrapy相比,但是还好Appium支持同时控制多台手机,我当时模拟器三开,两天抓了将近50W抖音无水印视频。
这也是利用Appium在爬大多数App的主要思路。
那么以上就是Appium的第一个优点,可以尽量少写代码,避开那些头疼的加密参数。
不仅是加密参数,如果你需要模拟注册,需要破解滑动验证码或者短信验证码,也是可以用Appium并借助第三方打码平台搞定的。
其次因为你是模拟人点击,而且速度够慢,这时候缺点也变成了优点,那就是基本0反爬,大部分手机App基本没有反爬,当然不排除个别桑心病狂的例外,比如检测你访问频率,禁止你使用抓包工具,以及传输数据不走http协议等。
准确定位元素位置,类似xpath,而不是点击横纵坐标,这样就算页面布局或者手机型号或者分辨率改变了,也能准确的点到相应元素。
有些App界面上的信息是可以直接通过Appium的text()属性抓到的,比如微信钱包流水,以前抓过,不知道现在还能不能抓了。
可以自己写一些小脚本,搞个签到,抢票,游戏外挂啊什么的(比如双11时候的11.11秒那个),如果你手头有大量闲置安卓手机,写个脚本,开个小工作室帮别人挂挂机刷刷金币,刷刷任务什么的,也是可以的,这都是后话了。
总结一下
以下情况,可以考虑使用Appium:
- 你要爬的数据不是太多,你又懒得写代码
- 参数加密太难搞定或者网站反爬太严格
- 有些数据App特有
- 每天定点注册,有短信加滑动验证码
- 就是自己私底下想搞些节省人力的小脚本
以下情况,请不要优先使用Appium:
- 老大急着要数据
- 爬取数据量巨大,除非你有大量闲置电脑或者手机
- 必须追求稳定,因为模拟器和手机偶尔抽风也很正常。
- 硬件性能不高,如果用安卓模拟器,必须要有显卡,否则模拟器不让你安装,即使安装上也卡成PPT,不过我后边会介绍如何将模拟器部署Docker,因为是无界面的,比较轻量级,对显卡也无硬性要求。
推荐阅读:小米降噪蓝牙耳机