书接上文。使用appium在帖子列表界面模拟上划动做,捕捉不到列表的规律。上划结束后,列表只能获取到屏幕呈现的部分,并且下标仍是从0开始的。ios
根据酸奶爸爸多年码代码的经验,帖子确定不是一次性加载完成的,必定会有分页,上划操做到某处APP必定会请求API接口。那么咱们监听APP的网络请求不就能获取到帖子内容了吗!redis
mac下使用charles这个软件实现。数据库
配置好charles网络监听后又遇到拦路虎,APP的请求是https协议的,charles监听到的报文都是乱码的。我在百度上谷歌了一下。json
终于能在charles里看到明文的网络请求了,因而经过网络请求能够概括出帖子分页加载的规律。这样酸奶爸爸就能够本身编写程序,循环调用API请求抓取数据了。此处又遇到拦路虎(我为何要加个“又”字)。API的请求作了参数签名校验,每次从charles抓到的请求,时效只有5分钟。并发
若是抓取程序可以尽量的模仿用户行为,那么咱们会突破全部服务端的屏障。
使用appium的在帖子详情页每3秒模拟用户上划一次,使用charles监听虚拟机的网络请求。这样charles会源源不断的捕捉到帖子分页的API请求。此处又又遇到拦路虎(我不喜欢“拦”,但我喜欢“路虎”)。此时小姐姐们的照片仍是在charles里,并且还都是url字符串。app
使用charles的自动保存功能,定时保存API响应结果。在charles的菜单栏“Tools”->“Auto Save”。按照下图配置,“Save Type”请选择“HTTP Archive”。配置完成后,charles抓取到的API响应会保存为HAR格式的文本文件。curl
到这里总算是拨开云雾见青天,har文件记录是每次API请求的全过程,有url、参数、响应时间和返回值等等,并且仍是标准的json格式。咱们能够用新学的go语言写一个控制台程序来解析har文件,并将解析后的结果整理归类,帖子内容存入MySQL数据库,小姐姐们的图片curl下载到文件系统。
新语言的学习并不都是新知识的学习,更多的是编程习惯的迁移。
酸奶爸爸原本是作PHP开发的,如今用GO语言写这个,本次迁移的技能以下:
- 日志记录
- MySQL数据库读写
- 断点调试
- 文本文件读取
- json解析
- 配置文件的解析
- curl下载文件
因此新语言的学习,第一步只要掌握语法,后续其实就是探索新语言所引入的新特性而已,以go语言为例,它对高并发有独到的设计。至于咱们在旧语言所掌握的一些通用技能,一并迁移过来就好。go语言如何链接redis、RabbitMQ,这等通用的功能无非就是用go语言的方式引用一下包而已。
因此你看,离开温馨区其实也挺容易的吧。
总结,这里才是干货
- 学习新技能要给本身设立一个目标做为奖励,遇到困难的时候,想一想咱们的达成目标后的奖励,是否是又有动力了。哪怕仅仅以看视频教程的方式学新语言,也坚持不了多久。
- 咱们掌握的每一项技能都是一个工具,遇到问题的时候,回顾一下咱们的工具箱,将其中某几种工具组合起来就能解决问题。因此平时要多听多看多思考,这样咱们才能向工具箱里装足够多的工具。遇到问题的时候,才有足够多的工具以供组装起来解决问题。
- 旧语言与新语言重叠的功能,这些是时间积淀的经典,须要夯实;新语言的新特性须要格外关注,不管是找工做仍是装13都用获得;旧语言的旧功能,就让它随风而去吧。
原文出处:https://www.cnblogs.com/lts8989/p/11239398.html