你不知道的网络爬虫编程那些事!爬虫与反爬的战争一直在无声发生

前言

对网络爬虫感兴趣,想学习Python编程的朋友们,可以关注我,私信我“获取”,自取免费的学习资料~

爬虫与反爬虫,是一个很不阳光的行业。

这里说的不阳光,有两个含义。

第一是,这个行业是隐藏在地下的,一般很少被曝光出来。很多公司对外都不会宣称自己有爬虫团队,甚至隐瞒自己有反爬虫团队的事实。这可能是出于公司战略角度来看的,与技术无关。

第二是,这个行业并不是一个很积极向上的行业。很多人在这个行业摸爬滚打了多年,积攒了大量的经验,但是悲哀的发现,这些经验很难兑换成闪光的简历。面试的时候,因为双方爬虫理念或者反爬虫理念不同,也很可能互不认可,影响自己的求职之路。本来程序员就有“文人相轻”的倾向,何况理念真的大不同。

然而这就是程序员的宿命。不管这个行业有多么的不阳光,依然无法阻挡大量的人进入这个行业,因为有公司的需求。

那么,公司到底有什么样的需求,导致了我们真的需要爬虫/反爬虫呢?

反爬虫很好理解,有了爬虫我们自然要反爬虫。对于程序员来说,哪怕仅仅是出于“我就是要证明我技术比你好”的目的,也会去做。对于公司来说,意义更加重大,最少,也能降低服务器负载,光凭这一点,反爬虫就有充足的生存价值。

那么,什么是爬虫呢?

最早的爬虫起源于搜索引擎。搜索引擎是善意的爬虫,可以检索你的一切信息,并提供给其他用户访问。为此他们还专门定义了robots.txt文件,作为君子协定,这是一个双赢的局面。

然而事情很快被一些人破坏了。爬虫很快就变得不再“君子”了。

后来有了“大数据”。无数的媒体鼓吹大数据是未来的趋势,吸引了一批又一批的炮灰去创办大数据公司。这些人手头根本没有大数据,他们的数据只要用一个U盘就可以装的下,怎么好意思叫大数据呢?这么点数据根本忽悠不了投资者。于是他们开始写爬虫,拼命地爬取各个公司的数据。很快他们的数据,就无法用一个U盘装下了。这个时候终于可以休息休息,然后出去吹嘘融资啦。

然而可悲的是,大容量U盘不断地在发布。他们总是在拼命地追赶存储增加的速度。

以上是爬虫与反爬虫的历史。

一、爬虫反爬虫运行现状

电子商务行业的爬虫与反爬虫更有趣一些,最初的爬虫需求来源于比价。

这是某些电商网站的核心业务。大家如果买商品的时候,是一个价格敏感型用户的话,很可能用过网上的比价功能(真心很好用啊)。毫无悬念,他们会使用爬虫技术来爬取所有相关电商的价格。他们的爬虫还是比较温柔的,对大家的服务器不会造成太大的压力。

然而,这并不意味着大家喜欢被他爬取。毕竟这对其他电商是不利的。于是需要通过技术手段来做反爬虫。

按照技术人员的想法,对方用技术怼过来,我们就要用技术怼回去,不能怂啊。这个想法是很好的,但是实际应用起来根本不是这么回事。

诚然,技术是很重要的,但是实际操作上,更重要的是套路。谁的套路更深,谁就能玩弄对方于鼓掌之中。谁的套路不行,有再好的技术,也只能被耍的团团转。这个虽然有点伤技术人员的自尊,然而,我们也不是第一天被伤自尊了。大家应该早就习惯了吧。

二、爬虫反爬虫技术现状

下面我们谈谈,爬虫和反爬虫分别都是怎么做的。

1、为python平反

首先是爬虫。爬虫教程你到处都可以搜得到,大部分是python写的。我曾经在一篇文章提到过:用python写的爬虫是最薄弱的,因为天生并不适合破解反爬虫逻辑,因为反爬虫都是用javascript来处理。然而慢慢的,我发现这个理解有点问题(当然我如果说我当时是出于工作需要而有意黑python你们信吗。。。)。

Python的确不适合写反爬虫逻辑,但是python是一门胶水语言,它适合捆绑任何一种框架。而反爬虫策略经常会变化的翻天覆地,需要对代码进行大刀阔斧的重构,甚至重写。这种情况下,python不失为一种合适的解决方案。

举个例子,你之前是用selenium爬取对方的站点,后来你发现自己被封了,而且封锁方式十分隐蔽,完全搞不清到底是如何封的,你会怎么办?你会跟踪selenium的源码来找到出错的地方吗?

你不会。你只会换个框架,用另一种方式来爬取。然后你就把两个框架都浅尝辄止地用了下,一个都没有深入研究过。因为没等你研究好,也许人家又换方式了。你不得不再找个框架来爬取。毕竟,老板等着明天早上开会要数据呢。老板一般都是早上八九点开会,所以你七点之前必须搞定。等你厌倦了,打算换个工作的时候,简历上又只能写“了解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的作者自己都维护不下去了,你真的愿意继续用吗?

当然了,最终,所有的反爬虫策略都逃不脱被破解的命运。但是这需要时间,反爬虫需要做的就是频繁发布,拖垮对方。如果对方两天可以破解你的系统,你就一天一发布,那么你就是安全的。这个系统甚至可以改名叫做“每天一道反爬题,轻轻松松学前端”。

三、爬虫反爬虫的未来

与竞争对手和解之后,我们去拜访对方,大家坐在了一起。之前网上自称妹子的,一个个都是五大三粗的汉子,这让我们相当绝望,在场唯一的一个妹子还是我们自己带过去的(就是上面提到的实习生),感觉套路了这么久,最终还是被对方套路了。

好在,吃的喝的都很好,大家玩的还是比较high的。后续就是和平年代啦,大家不打仗了,反爬虫的逻辑扔在那做个防御,然后就开放白名单允许对方爬取了。群里经常叫的就是:xxx你怎么频率这么高,xxx你为什么这个接口没给我开放,为什么我爬的东西不对我靠你是不是把我封了啊。诸如此类的。

和平年代的反爬虫比战争年代还难做。因为战争年代,误伤率只要不是太高,公司就可以接受。和平年代大家不能搞事情,误伤率稍稍多一点,就会有人叫:好好的不赚钱,瞎搞什么搞。此外,战争年代只要不拦截用户,就不算误伤。和平年代还要考虑白名单,拦截了合作伙伴也是误伤。因此各方面会更保守一些。不过,总体来说还是和平年代比较happy。毕竟,谁会喜欢没事加班玩呢。

然而和平持续的不是很久,很快就有了新的竞争对手选择爬虫来与我们打。毕竟,这是一个利益驱使的世界。只要有大量的利润,资本家就会杀人放火,这不是我们这些技术人员可以决定的。我们希望天下无虫,但是我们又有什么权利呢。

对网络爬虫感兴趣,想学习Python编程的朋友们,可以关注我,私信我“获取”,自取免费的学习资料~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351