专栏名称: 软件定义世界(SDX)
软件定义世界, 数据驱动未来。
目录
相关文章推荐
网信内蒙古  ·  解读2024年全国数据资源调查情况 ·  3 小时前  
网信内蒙古  ·  解读2024年全国数据资源调查情况 ·  3 小时前  
人工智能与大数据技术  ·  AI编程新王Claude ... ·  3 天前  
人工智能与大数据技术  ·  15亿美元AI独角兽崩塌,全是印度程序员冒充 ... ·  2 天前  
人工智能与大数据技术  ·  AI 正在培养“文盲”程序员? ·  4 天前  
51好读  ›  专栏  ›  软件定义世界(SDX)

别让你的老板进监狱也别让你的用户受伤害,谈爬虫反爬虫套路

软件定义世界(SDX)  · 公众号  · 大数据  · 2017-06-11 06:27

正文

请到「今天看啥」查看全文


你不会。你只会换个框架,用另一种方式来爬取。然后你就把两个框架都浅尝辄止地用了下,一个都没有深入研究过。因为没等你研究好,也许人家又换方式了。你不得不再找个框架来爬取。毕竟,老板等着明天早上开会要数据呢。老板一般都是早上八九点开会,所以你七点之前必须搞定。等你厌倦了,打算换个工作的时候,简历上又只能写“了解n个框架的使用”,仅此而已。

这就是爬虫工程师的宿命,爬虫工程师比外包还可怜。外包虽然不容易积累技术,但是好歹有正常上下班时间,爬虫工程师连这个权利都没有。

然而反爬虫工程师就不可怜了吗?也不是的。反爬虫有个天生的死穴,就是:误伤率。

2. 无法绕开的误伤率

我们首先谈谈,面对对方的爬虫,你的第一反应是什么?

如果限定时间的话,大部分人给我的答案都是:封杀对方的 IP。

然而,问题就出在,IP 不是每人一个的。大的公司有出口 IP,ISP 有的时候会劫持流量让你们走代理,有的人天生喜欢挂代理,有的人为了翻墙 24 小时挂 vpn,最坑的是,现在是移动互联网时代,你如果封了一个 IP?不好意思,这是中国联通的 4G 网络,5 分钟之前还是别人,5 分钟之后就换人了哦!

因此,封 IP 的误伤指数最高。并且,效果又是最差的。因为现在即使是最菜的新手,也知道用代理池了。你们可以去淘宝看下,几十万的代理价值多少钱。我们就不谈到处都有的免费代理了。

也有人说:我可以扫描对方端口,如果开放了代理端口,那就意味着是个代理,我就可以封杀了呀。

事实是残酷的。我曾经封杀过一个 IP,因为他开放了一个代理端口,而且是个很小众的代理端口。不出一天就有人来报事件,说我们一个分公司被拦截了。我一查 IP,还真是我封的 IP。我就很郁闷地问他们 IT,开这个端口干什么?他说做邮件服务器啊。我说为啥要用这么奇怪的端口?他说,这不是怕别人猜出来么?我就随便取了个。

扫描端口的进阶版,还有一种方式,就是去订单库查找这个 IP 是否下过订单,如果没有,那么就是安全的。如果有,那就不安全。有很多网站会使用这个方法。然而这其实只是一种自欺欺人的办法而已。只需要下一单,就可以永久洗白自己的 IP,天下还有比这更便宜的生意吗?

因此,封 IP,以及封 IP 的进阶版:扫描端口再封 IP,都是没用的。根本不要考虑从 IP 下手,因为对手会用大量的时间考虑如何躲避 IP 封锁,你干嘛和人家硬刚呢。这没有任何意义。

那么,下一步你会考虑到什么?

很多站点的工程师会考虑:既然没办法阻止对方,那我就让它变的不可读吧。我会用图片来渲染关键信息,比如价格。这样,人眼可见,机器识别不出来。

这个想法曾经是正确的,然而,坑爹的技术发展,带给我们一个坑爹的技术,叫机器学习。顺便带动了一个行业的迅猛发展,叫 OCR。很快,识别图像就不再是任何难题了。甚至连人眼都很难识别的验证码,有的 OCR 都能搞定,比我肉眼识别率都高。更何况,现在有了打码平台,用资本都可以搞定,都不需要技术。

那么,下一步你会考虑什么?

这个时候,后端工程师已经没有太多的办法可以搞了。 不过后端搞不定的事情,一般都推给前端啊,前端从来都是后端搞不定问题时的背锅侠。 多少年来我们都是这么过来的。前端工程师这个时候就要勇敢地站出来了:

“都不要得瑟了,来比比谁的前端知识牛逼,你牛逼我就让你爬。”

我不知道这篇文章的读者里有多少前端工程师,我只是想顺便提一下:你们以后将会是更加抢手的人才。

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. 误伤,还是误伤

这又回到了我们开始提到的“误伤率”的问题了。我们知道,发布越频繁,出问题的概率越高。那么,如何在频繁发布的情况下,还能做到少出问题呢?







请到「今天看啥」查看全文