3、前端工程师的逆袭 我们知道,一个数据要显示到前端,不仅仅是后端输出就完事了,前端要做大量的事情,比如取到json之后,至少要用template转成html吧? 这已经是步骤最少最简单的了。然后你总要用css渲染下吧? 这也不是什么难事。 等等,你还记得自己第一次做这个事情的时候的经历吗?真的,不是什么难事吗? 有没有经历过,一个html标签拼错,或者没有闭合,导致页面错乱?一个css没弄好,导致整个页面都不知道飘到哪去了? 这些事情,你是不是很想让别人再经历一次? 这件事情充分说明了:让一个资深的前端工程师来把事情搞复杂一点,对方如果配备了资深前端工程师来破解,也需要耗费3倍以上的时间。毕竟是读别人的代码,别人写代码用了一分钟,你总是要读两分钟,然后骂一分钟吧?这已经算很少的了。如果对方没有配备前端工程师。。。那么经过一段时间,他们会成长为前端工程师。 之后,由于前端工程师的待遇比爬虫工程师稍好一些,他们很快会离职做前端,既缓解了前端人才缺口,又可以让对方缺人,重招。而他们一般是招后端做爬虫,这些人需要再接受一次折磨,再次成长为前端工程师。这不是很好的事情吗。 所以,如果你手下的爬虫工程师离职率很高,请仔细思考下,是不是自己的招聘方向有问题。 那么前端最坑爹的技术是什么呢?前端最坑爹的,也是最强大的,就是我们的:javascript。 Javascript有大量的花样可以玩,毫不夸张的说,一周换一个feature(bug)给对方学习,一年不带重样的。这个时候你就相当于一个面试官,对方要通过你的面试才行。 举个例子,Array.prototype里,有没有map啊?什么时候有啊?你说你是xx浏览器,那你这个应该是有还是应该没有啊?你说这个可以有啊?可是这个真没有啊。那能不能在string里面获取字符啊?哪个浏览器可以哪个不行啊?咦你为什么支持webkit前缀啊?等等,刚刚你还支持怎么现在不支持了啊?你声明的不对啊。 这些对于前端都是简单的知识,已经习以为常了。但是对于后端来说简直就是噩梦。 然而,前端人员自己作死,研究出了一个东西,叫:nodejs。基于v8,秒杀所有的js运行。 不过nodejs实现了大量的feature,都是浏览器不存在的。你随随便便访问一些东西(比如你为什么会支持process.exit),都会把node坑的好惨好惨。而且。。。浏览器里的js,你拉到后台用nodejs跑,你是不是想到了什么安全漏洞?这个是不是叫,代码与数据混合?如果他在js里跑点恶心的代码,浏览器不支持但是node支持怎么办? 还好,爬虫工程师还有phantomjs。但是,你怎么没有定位啊? 哈哈,你终于模拟出了定位,但是不对啊,根据我当前设置的安全策略你现在不应该能定位啊?你是怎么定出来的?连phantomjs的作者自己都维护不下去了,你真的愿意继续用吗? 当然了,最终,所有的反爬虫策略都逃不脱被破解的命运。但是这需要时间,反爬虫需要做的就是频繁发布,拖垮对方。如果对方两天可以破解你的系统,你就一天一发布,那么你就是安全的。这个系统甚至可以改名叫做“每天一道反爬题,轻轻松松学前端”。 4、误伤,还是误伤 这又回到了我们开始提到的“误伤率”的问题了。我们知道,发布越频繁,出问题的概率越高。那么,如何在频繁发布的情况下,还能做到少出问题呢? 此外还有一个问题,我们写了大量的“不可读代码”给对方,的确能给对方造成大量的压力,但是,这些代码我们自己也要维护啊。如果有一天忽然说,没人爬我们了,你们把代码下线掉吧。这个时候写代码的人已经不在了,你们怎么知道如何下线这些代码呢? 这两个问题我暂时不能公布我们的做法,但是大家都是聪明人,应该都是有自己的方案的,软件行业之所以忙的不得了,无非就是在折腾两件事,一个是如何将代码拆分开,一个是如何将代码合并起来。 关于误伤率,我只提一个小的tip:你可以只开启反爬虫,但是不拦截,先放着,发统计信息给自己,相当于模拟演练。等统计的差不多了,发现真的开启了也不会有什么问题,那就开启拦截或者开启造假。 这里就引发了一个问题,往往一个公司的各个频道,爬取难度是不一样的。原因就是,误伤检测这种东西与业务相关,公司的基础部门很难做出通用的。只能各个部门自己做。甚至有的部门做了有的没做。因此引发了爬虫界一个奇葩的通用做法:如果PC页面爬不到,就去H5试试。如果H5很麻烦,就去PC碰碰运气。 三、爬虫反爬虫套路现状那么一旦有发现对方数据造假怎么办? 早期的时候,大家都是要抽查数据,通过数据来检测对方是否有造假。这个需要人工核对,成本非常高。可是那已经是洪荒时代的事情了。如果你们公司还在通过这种方式来检测,说明你们的技术还比较落伍。之前我们的竞争对手是这么干的:他们会抓取我们两次,一次是他们解密出来key之后,用正经方式来抓取,这次的结果定为A。一次是不带key,直接来抓,这次的结果定为B。根据前文描述,我们可以知道,B一定是错误的。那么如果A与B相等,说明自己中招了。这个时候会停掉爬虫,重新破解。 1、不要回应 所以之前有一篇关于爬虫的文章,说如何破解我们的。一直有人要我回复下。我一直觉得没什么可以回复的。 第一,反爬虫被破解了是正常的。这个世界上有个万能的爬虫手段,叫“人肉爬虫”。假设我们就是有钱,在印度开个分公司,每天雇便宜的劳动力用鼠标直接来点,你能拿我怎么办? 第二,我们真正关心的是后续的这些套路。而我读了那篇文章,发现只是调用了selenium并且拿到了结果,就认为自己成功了。 我相信你读到这里,应该已经明白为什么我不愿意回复了。我们最重要的是工作,而不是谁打谁的脸。大家如果经常混技术社区就会发现,每天热衷于打别人脸的,一般技术都不是很好。 当然这并不代表我们技术天下第一什么的。我们每天面对大量的爬虫,还是遇到过很多高手的。就如同武侠小说里一样,高手一般都比较低调,他们默默地拿走数据,很难被发现,而且频率极低,不会影响我们的考评。你们应该明白,这是智商与情商兼具的高手了。 我们还碰到拉走我们js,砍掉无用的部分直接解出key,相当高效不拖泥带水的爬虫,一点废请求都没有(相比某些爬虫教程,总是教你多访问写没用的url免得被发现,真的不知道高到哪里去了。这样做除了会导致机器报警,导致对方加班封锁以外,对你自己没有任何好处)。 而我们能发现这一点仅仅是是因为他低调地写了一篇博客,通篇只介绍技术,没有提任何没用的东西。 这里我只是顺便发了点小牢骚,就是希望后续不要总是有人让我回应一些关于爬虫的文章。线下我认识很多爬虫工程师,水平真的很好,也真的很低调(不然你以为我是怎么知道如何对付爬虫的。。。),大家都是一起混的,不会产生“一定要互相打脸”的情绪。 顺便打个小广告,如果你对这个行业有兴趣,可以考虑联系HR加入我们哦。反爬虫工程师可以加入携程,爬虫工程师可以加入去哪儿。
|