爬虫江湖的恩怨情仇

一、爬虫的发展历史

网络爬虫源于上个世纪90年代的Google等搜索引擎,爬虫用于抓取互联网上的Web页面,再由搜索引擎进行索引和存储,从而为我们提供检索服务。网络爬虫位于搜索引擎的后台,并未直接与用户接触,属于幕后技术,因此在较长的时间内并未被广大开发人员所关注

现代意义上的搜索引擎的祖先,是1990年由蒙特利尔大学学生Alan Emtage发明的Archie。虽然当时World Wide Web还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此AlanArchie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。由于Archie深受用户欢迎,受其启发,美国内华达System Computing Services大学于1993年开发了另一个与之非常相似的搜索工具,不过此时的搜索工具除了索引文件外,也已经能检索网页了。

由于专门用于检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此,搜索引擎的“机器人”程序就被称为“蜘蛛”程序。世界上第一个用于监测互联网发展规模的“机器人”程序是Matthew Gray开发的World wide Web Wanderer。刚开始它只用来统计互联网上的服务器数量,后来则发展为能够检索网站域名。这可能也就是网络爬虫这个概念的最早来历了吧。

1994年7月,Michael Mauldin将John Leavitt的蜘蛛程序接入到其索引程序中,创建了当时著名的搜索引擎Lycos。这应该也算是第一个搜索引擎了。其后无数的搜索引擎促使了爬虫越写越复杂,并逐渐向多策略、负载均衡及大规模增量抓取等方向发展。爬虫的工作成果是的搜索引擎能够渐叟几乎全部的万维网页,甚至被删除的网页也可以通过”网页快照“的功能访问。

发展到现今,各大网站、搜索引擎都有了自己的网络资源采集程序,并进一步发展出”云采集“的概念。爬虫是一个实践性很强的技术活,来看谷歌趋势中从2004年以来对爬虫技术的关注度变化,分别是中国、美国及全球趋势:

中国在2014年前对爬虫基本没啥关注,随着Python的火热,2014年上升趋势非常明显。

美国不愧是互联网的发源地,可以看出来,对爬虫的关注度一直都不错。

全球就不说了,一直挺热,有点看不懂了。。。

二、爬虫礼仪

正如爱德华等人所说的:“用于检索的带宽不是无限的,也不是免费的;所以,如果引入衡量爬虫抓取质量或者新鲜度的有效指标的话,不但伸缩性,连有效性都将变得十分必要”(爱德华等人,2001年)。一个爬虫就必须小心的选择下一步要访问什么页面。网页爬虫的行为通常是四种策略组合的结果。

  1. 选择策略,决定所要下载的页面;
  2. 重新访问策略,决定什么时候检查页面的更新变化;
  3. 平衡礼貌策略,指出怎样避免站点超载;
  4. 并行策略,指出怎么协同达到分布式抓取的效果。

有一些人认为网络爬虫是一个不太优雅的行业,这种看法是错误的。只是被一些低质量个人、小型爬虫把整个爬虫环境给破坏了,具体表现在下面几个方面:

  1. 不遵守Robots协议,连接一个Web服务器之后不检测虚拟根目录下是否有Robots.txt文件,也不管文件里面关于页面访问控制列表的规定。大家知道这个协议是一个行业协议,忽视这个协议也就意味着行业没有了规范。
  2. 爬行策略没有优化,一般开源系统实现了宽度优先或深度优先的策略,但是并没有对Web页面的具体特征做优化,比如Portal类型页面超链接数量非常多,这些链接如果直接进入爬行任务,就很容易对Web服务器造成拒绝服务攻击。
  3. 3多线程、分布式的架构,这个看似好的技术,对于网络爬虫来说只是一厢情愿。客户端架构设计得再好,爬行策略、增量模式等等没有做好,就等于制造了很多小爬虫在服务器上打群架。因此,这种情况最终导致两败俱伤的结局,对Web服务器和爬虫都不好。

  由于互联网Web的开放性和匿名性,使得此类爬虫的行为就像一些逛商场的人,他们不买东西、不看广告、只顾抄价格拍照。也像那些迷失在城市交通路上的车子,不断地重复走着某些路线,不知道怎么才能到达目的地。最终,必然导致双方(顾客-商场管理员,司机-交管员)进入明争暗斗,并恶化了整个行业。

前段时间臭名昭著的今日头条爬虫瘫痪小网站事件,可以看出资本的不择手段。

三、爬虫与反爬虫之间的战争

爬虫目的是自动化的从目标网页获取数据,但是这个行为会对目标站点造成一定压力,对方出于对站点性能或数据的保护,一般都会有反爬手段。所以在开发爬虫过程中需要考虑反反爬。

爬虫开发过程中常见分布式(代理IP)、异步数据解析(内置浏览器内核)、光学图片识别、模拟验证(模拟请求Header、User-Agent、Token)等手段。网络爬虫会为Web服务器带来巨大的资源开销,当我们编写的爬虫数据不能给我们带来价值时,我们应停止没必要的网络请求来给互联网减少干扰。

站点反爬一般会考虑后台对访问进行统计,对单个IP,Session、单种User-Agent访问超过阈值或 Referer缺失的请求进行封锁,Robots协议,异步数据加载,页面动态化,请求验证拦截等。高端的反反爬包括混淆、不稳定代码、给假数据(投毒)、行为分析、假链陷阱、字符转图片等。一般反爬虫策略多数用在比较低级的爬虫上,这类爬虫多为简单粗暴的不顾服务器压力不停访问,再一种为失控的或被人遗忘的爬虫,这类爬虫一般需要在第一时间封锁掉。

鉴于爬虫爬取的数据为目标网站发布于互联网的公开数据,所以理论上是不可能完全阻止掉爬虫的。站点能做的只是增加爬虫的爬取难度,让爬虫的开发成本增高从而知难而退。越是高级的爬虫,越难被封锁,相应高级爬虫的开发成本也越高。在对高级爬虫进行封锁时,如果成本高到一定程度,并且爬虫不会给自己带来大的性能压力和数据威胁时,这时就无需继续提升成本和爬虫对抗了。目前大多热门站点在与爬虫的博弈中,多维持着一个爬虫与反爬虫的平衡,毕竟双方都是为了在商业市场中获取利益,而不是不计成本的干掉对方。

甚至有很多时候,两个公司的员工,工作时间为了爬虫和反爬斗得你死我活,下班后却一起宵夜,一起探讨爬虫技术。也算是相亲相爱一家人了。有这样一张图,非常有意思,可以看看:

当然,随着维权意识的提升,爬虫入刑的案例也非常多,可以看我前面给大家整理的文章《要过年了,中国爬虫违法违规案例汇总!不要被钱财蒙蔽你的双眼》 。

四、爬虫的未来

51信用卡被查,更是将暴力催收背后非法使用爬虫技术爬取个人隐私数据的丑行,暴露在阳光之下。 

一时间,“爬虫”成为众矢之的,一些公司紧急下架了爬虫相关的招聘信息,给大数据风控、人工智能从业者带来些许恐慌,头发又多落了几根。 

传统网络爬虫最大的应用场景是搜索引擎,普通的企业更多是做网站或应用。后来随着网络数据分析的需要,以及互联网上的舆情事件层出不穷,针对网络爬虫有了大量的需求,采集的对象主要是些新闻资讯。 

近些年,由于大数据处理和数据挖掘技术的发展,数据资产价值的概念深入人心,爬虫技术得到更加广泛和深入的发展,采集对象也更丰富,高性能、并发式的技术指标也更高。 

围绕网络爬虫合法性的讨论仍然存在,情况也比较复杂。目前的趋势下,许多法律问题还处于模糊地带,往往取决于具体的案例影响。然而,可以肯定的是,只要有互联网,就会有网络爬虫。只有网络爬虫让体量巨大的互联网变得可以搜索,使爆炸式增长的互联网变得更加容易访问和获取,在可预见的未来,互联网爬虫技术将继续得到发展。 

互联网作为人类历史最大的知识仓库,是非结构化或非标准化的。互联网上聚集了大量的文本、图片、多媒体等数据,内容虽然非常有价值,但是知识提取的难度仍然非常巨大。语义互联网、知识共享等概念越来越普及,真正语义上的互联网将是网络爬虫的目标。此外,物联网技术的发展,将是互联网的升级形式,也将是爬虫技术未来发展的方向。

以网友的留言结束今天的话题好了:


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考资料:

  1. https://blog.csdn.net/illidanismine/article/details/70212669
  2. https://new.qq.com/omn/20180328/20180328G1KKCM.html
  3. http://www.sohu.com/a/232316971_100063030
  4. https://blog.csdn.net/yulidrff/article/details/86064469
  5. http://www.01caijing.com/blog/334561.htm
  6. https://www.v2ex.com/t/582295
发布了236 篇原创文章 · 获赞 2724 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/m0_37609579/article/details/103222671