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

书接上文。使用appium在帖子列表界面模拟上划动作,捕捉不到列表的规律。上划结束后,列表只能获取到屏幕呈现的部分,而且下标还是从0开始的。

根据酸奶爸爸多年码代码的经验,帖子肯定不是一次性加载完成的,一定会有分页,上划操作到某处APP一定会请求API接口。那么我们监听APP的网络请求不就能获取到帖子内容了吗!

mac下使用charles这个软件实现。

charles简介

配置好charles网络监听后又遇到拦路虎,APP的请求是https协议的,charles监听到的报文都是乱码的。我在百度上谷歌了一下。

Mac使用Charles进行HTTPS抓包

终于能在charles里看到明文的网络请求了,于是通过网络请求可以归纳出帖子分页加载的规律。这样酸奶爸爸就可以自己编写程序,循环调用API请求抓取数据了。此处又遇到拦路虎(我为什么要加个“又”字)。API的请求做了参数签名校验,每次从charles抓到的请求,时效只有5分钟。

如果抓取程序能够尽可能的模仿用户行为,那么我们会突破所有服务端的屏障。

使用appium的在帖子详情页每3秒模拟用户上划一次,使用charles监听虚拟机的网络请求。这样charles会源源不断的捕捉到帖子分页的API请求。此处又又遇到拦路虎(我不喜欢“拦”,但我喜欢“路虎”)。此时小姐姐们的照片还是在charles里,而且还都是url字符串。

使用charles的自动保存功能,定时保存API响应结果。在charles的菜单栏“Tools”->“Auto Save”。按照下图配置,“Save Type”请选择“HTTP Archive”。配置完成后,charles抓取到的API响应会保存为HAR格式的文本文件。

HAR 格式规范

到这里总算是拨开云雾见青天,har文件记录是每次API请求的全过程,有url、参数、响应时间和返回值等等,而且还是标准的json格式。我们可以用新学的go语言写一个控制台程序来解析har文件,并将解析后的结果整理归类,帖子内容存入MySQL数据库,小姐姐们的图片curl下载到文件系统。

新语言的学习并不都是新知识的学习,更多的是编程习惯的迁移。

酸奶爸爸本来是做PHP开发的,现在用GO语言写这个,本次迁移的技能如下:

  • 日志记录
  • MySQL数据库读写
  • 断点调试
  • 文本文件读取
  • json解析
  • 配置文件的解析
  • curl下载文件

所以新语言的学习,第一步只要掌握语法,后续其实就是探索新语言所引入的新特性而已,以go语言为例,它对高并发有独到的设计。至于我们在旧语言所掌握的一些通用技能,一并迁移过来就好。go语言如何连接redis、RabbitMQ,这等通用的功能无非就是用go语言的方式引用一下包而已。

所以你看,离开舒适区其实也挺容易的吧。

总结,这里才是干货

  • 学习新技能要给自己设立一个目标作为奖励,遇到困难的时候,想想我们的达成目标后的奖励,是不是又有动力了。哪怕仅仅以看视频教程的方式学新语言,也坚持不了多久。
  • 我们掌握的每一项技能都是一个工具,遇到问题的时候,回顾一下我们的工具箱,将其中某几种工具组合起来就能解决问题。所以平时要多听多看多思考,这样我们才能向工具箱里装足够多的工具。遇到问题的时候,才有足够多的工具以供组装起来解决问题。
  • 旧语言与新语言重叠的功能,这些是时间积淀的经典,需要夯实;新语言的新特性需要格外关注,无论是找工作还是装13都用得到;旧语言的旧功能,就让它随风而去吧。

APP爬虫(2)把小姐姐的图片down下来的更多相关文章

  1. scrapy爬虫爬取小姐姐图片(不羞涩)

    这个爬虫主要学习scrapy的item Pipeline 是时候搬出这张图了: 当我们要使用item Pipeline的时候,要现在settings里面取消这几行的注释 我们可以自定义Item Pip ...

  2. 用Python做个海量小姐姐素描图

    素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像.文章共分两部分: 第一部分介绍两种使 ...

  3. Lottie 动画里有图片怎么办?设计师小姐姐也能帮你减少开发量!

    一.序 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整解决方案,设计师只需要使用 After Effectes (之后简称 AE)设计出动画之后,使用 Lotti ...

  4. 微博爬虫,python微博用户主页小姐姐图片内容采集爬虫

    python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的! 要抓取的微博地址:ht ...

  5. python血脉贲张的cosplay小姐姐图片

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本环境配置 python 3.6 pycharm requests 相关模块pip安装即可 ...

  6. 微信小程序裁剪图片成圆形

    代码地址如下:http://www.demodashi.com/demo/14453.html 前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在gith ...

  7. 刷抖音太累,教你用Python把高颜值的小姐姐都爬下来慢慢看

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 星安果.AirPython 目 标 场 景 相信大家平时刷抖音短视频 ...

  8. 用python爬取之后发现果然如此,都说知乎的小姐姐漂亮

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  9. 要不是真的喜欢学技术,谁会来用Python爬小姐姐啊

    养成习惯,先赞后看!!!不用于任何商业价值,只是自己娱乐.否则 爬虫爬的好,牢饭吃到饱.这是我们这次爬取的网址:https://www.vmgirls.com/ 很多人学习python,不知道从何学起 ...

随机推荐

  1. 使用AnimateWindow来实现窗口淡入淡出(主要有四种动画,滚动,滑动,折叠或展开,和淡入淡出)

    如果是在VC6下进行编译,应引入下面的预编译宏,注意放在windows.h的前面#undef  WINVER   #define  WINVER   0x500为什么要引入上面的宏呢?看看winuse ...

  2. 安装使用Cloudera Impala

    安装与使用Cloudera Impala Cloudera Impala提供快速的.交互式的SQL查询方式,直接基于Apache Hadoop存储在HDFS或HBase中的数据进行查询.除了使用与Ap ...

  3. No.595-Big Countries-(LeetCode之Database篇)

    数据库表 给出的数据库表如下,表名为World. +-----–+----+----+----–+-----+ |   name         | continent |    area    | ...

  4. 转:Mongoose使用操作

    一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口.   连接数据库 // mongoose 链接var mongoose = req ...

  5. jmeter模拟spike测试(尖峰测试)

    概述 尖峰测试(Spike testing)在性能测试中属于压力测试的一个子集.指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景. 为了验证我们的网站在访问用户急剧增加的情况下,或者短时间内反 ...

  6. openstack namespace 的应用

    查看虚拟机网络连通性 1.neutron port-list | grep IP 2.neutron port-show ID 查看subnet 3.neutron subnet-show ID 查看 ...

  7. Spark学习之路(十二)—— Spark SQL JOIN操作

    一. 数据准备 本文主要介绍Spark SQL的多表连接,需要预先准备测试数据.分别创建员工和部门的Datafame,并注册为临时视图,代码如下: val spark = SparkSession.b ...

  8. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  9. Python开发【第七篇】: 面向对象和模块补充

    内容概要 特殊成员 反射 configparser模块 hashlib模块 logging模块 异常处理 模块 包 1. 特殊成员 什么是特殊成员呢? __init_()就是个特殊的成员. 带双下划线 ...

  10. Flutter学习笔记(4)--Dart函数

    如需转载,请注明出处:Flutter学习笔记(4)--Dart函数 Dart是一个面向对象的语言,所以函数也是对象,函数属于Function对象,函数可以像参数一样传递给其他函数,这样便于做回调处理: ...