Web是一个开放的服务平台,这也奠定了Web从20世纪90年代初出现到今天的30年间蓬勃发展的趋势。众所周知,俗话说,萧何败,萧何也。对外开放的特殊类型,百度搜索引擎及其简单易学的HTML和CSS技术,使Web成为互联网技术行业中更时尚、更完善的信息内容传播媒体。
然而,如今作为一款商业手机软件,Web服务平台上的内容信息的版权并没有得到保障。与手机软件客户端相比,你的网页中的内容可以通过一些低成本、低技术门槛的爬虫程序获取,这就是本系列文章要讨论的话题——爬虫技术。
很多人认为Web应该自始至终遵循对外开放的精神,网页中展示的信息内容应该不遗余力地与所有互联网技术共享。不知道,IT行业发展到今天,Web已经不再是当初与PDF抗衡的“HTML文件”信息内容媒介。它已经作为一种轻量级客户端意识形态而存在。然而,以软件开发平台发展到今天的趋势,Web别无选择,只能处理专利权维护的问题。试想,如果原创的优质内容无法维持,网络时代抄袭、盗用现象猖獗,实际上对Web绿色生态的良好发展趋势并无好处,也难以鼓励大量优质原创内容的生产制造。
网络爬虫未经授权的抓取过程是危害网络原创内容绿色生态的一大元凶。因此,为了维护网站的内容,首先要考虑如何反爬虫。
从网络爬虫防御的角度来看
一个非常简单的网络爬虫基本上就是一个http请求,适用于服务器和移动客户端的所有计算机语言。如果对整体目标网页的url进行http get请求,就可以在电脑浏览器加载网页时获得详细的html文本文档,称为“同页”。
作为防御方,服务器可以根据http请求头中的User-Agent检查手机客户端是合理合法的计算机浏览器程序进程还是脚本编写的爬虫程序进程,然后决定是否发送真实的网页信息。
自然,这是最小儿科的防御方式。作为攻击方,网络爬虫完全可以伪造用户代理域名。甚至,只要你愿意,在http get的方式下,所有请求头的字段名,比如Referrer、Cookie,都可以被网络爬虫轻易仿冒。
此时,服务器可以根据你声明的厂商和版本号(来自User-Agent),利用电脑浏览器http头的指纹识别,识别出你http头中的每个字段名是否符合电脑浏览器的特征,如果不符合,则作为网络爬虫处理。这种技术有一个典型的应用,就是PhantomJS 1.x版本号,因为它的最底层启用了基于Qt的互联网库,所以http头具有明显的基于Qt的互联网恳求特征,可以被服务器立即识别并阻止。
此外,还有一种比较变态的服务器端网络爬虫检查系统,就是对所有页面访问的http请求,在http响应中植入一个cookie令牌,然后检查访问请求在这个网页中多线程实现的一些ajax套接字中是否有cookie令牌。将token发回家说明是合理合法的电脑浏览器访问,否则说明被发token的客户很快浏览了网页的html但没有浏览html中实现js后启用的ajax请求,很可能是网页爬虫。
如果你在没有token的情况下立即浏览了一个socket,说明你在没有乞讨html网页的情况下,立即向互联网乞讨到了网页中应该由ajax浏览的socket,这显然证明你是一个不正常的网络爬虫。著名的电子商务网站亚马逊就是这种防御对策的选择。
以上是在服务器端检查网络爬虫可以玩到的一些小技巧。
根据手机客户端js运行测试
当代的电脑浏览器赋予了JavaScript强大的工作能力,我们可以将网页的所有具体内容做成js异步乞求ajax读取数据并3D渲染,这显然提高了网络爬虫抓取内容的门槛。借助这种方法,当我们把爬行和反爬行的阻力竞技场从服务器端迁移到手机客户端电脑浏览器中的js操作时,再来说说整合了手机客户端的js操作时,网络爬虫的爬行技术。
近期提到的各种服务器端检查,就一般python和java语言编写的http抓取程序而言,都有一定的技术壁垒。毕竟,对于未经授权的爬虫来说,web应用程序是一个黑盒。很多事情都是要一点一点去尝试的,开发一套设计好的抓取程序要花很多钱。作为防御方,如果网站随便调整一些对策,网络攻击就不得不再次花费同样的时间来改变网络爬虫的爬行逻辑。
此时,必须应用无头浏览器。这有什么技术性?其实简而言之就是程序流可以实际操作电脑浏览器浏览网页,让写网络爬虫的人通过启用电脑浏览器,根据程序流暴露的api完成复杂的爬行领域模型。
其实近年来,这已经不是什么新技术了。很久以前,根据webkit核心的PhantomJS,Firefox核心的SlimerJS,IE核心的trifleJS,我有兴趣在这里看一下,这里是两个无头浏览器的集合。
这种无头浏览器程序代码的基本原理,其实就是对开源系统的一些ie内核C代码进行多方面的更新、改造和封装,完成一个简单的浏览器程序流程,用于无GUI页面的3D渲染。但是这个新项目普遍存在的缺点是,他们的代码都是基于fork官网webkit等核心的某个版本号的主条码,所以无法跟踪一些全新的css属性和js语法,并且存在一些兼容模式的问题,比不上真正发布的GUI电脑浏览器。
其中,PhantonJS应该是利用率最完美的一个。我之前写过一篇关于这种网络爬虫的识别的博客,这里不多做解释。幻想曲有很多问题。因为是单进程实体模型,没有必要的沙盒维护,ie内核的安全系数较弱。
如今,Google Chrome elite团队已经在chrome 59 release版本号中向公众开放了headless mode api,并开发了一个根据Node.js启用的headless chromium dirver库的开源系统,因为我为这个库专用了一个centos自然环境部署和安装目录。
无头chrome是无头浏览器中一个独特的秘密武器,因为它本身就是一个chrome浏览器,所以它适用于css3D的各种新的渲染特性和js工作时的英文语法。
按照那种方式,网络爬虫作为攻击方,基本上可以绕过服务器端检查的所有逻辑,但是移动客户端的js操作还是存在一些漏洞,比如:
根据插件目标检查
根据语言进行检查
根据webgl 进行检查
根据电脑浏览器发际线特征进行检查
根据不正确img src特性转化成的img目标的查验检查根据不正确的img src特性转换的img目标
根据上面一些电脑浏览器的显著特点,基础可以吃透目前市面上绝大多数的 无头浏览器 程序流。在这一点上,其实就是提高抓取网页的门槛,规定写网络爬虫的开发者除了修改ie内核的C代码,重新编译一个电脑浏览器,别无选择。而且以上几个方面的特点是,ie内核的修改其实并不是很大。
再者,根据电脑浏览器的UserAgent字段名中描述的电脑浏览器的知名品牌、版本号、型号、规格信息内容,可以测试js、DOM、BOM的每个原生态目标的特性和途径,看其特性是否符合该版本号的电脑浏览器的特性。
这种方法被称为计算机浏览器指纹识别与验证技术,通过大中型网站的方式收集各种型号和规格的计算机浏览器的api信息。作为编写网络爬虫的攻击者,可以在无头浏览器的操作中预先引入一些js逻辑,模仿计算机浏览器的特性。
另外,在科研计算机的浏览器端使用
js api开发Robots Browser Detect时,我们发现了一个有趣的窍门。您可以将预先引入的js函数装扮成本机函数,并讨论以下代码:
网络爬虫攻击者会预先引入一些js方法,在一些原api外面包裹一层代理函数作为钩子,然后用这个假的js api来覆盖原api。如果防御者在toString之后根据【原生代码】的检查来检查和判别这件事,就会被绕过。因此,必须更严格地检查。因为bind(null)的伪方式,所以不以toString命名。
反爬行动物的银弹
目前最可靠的防爬和智能机器人巡检方式是短信验证码技术。但是,短信验证码并不意味着必须强迫客户键入一系列英文字母数据。还有很多基于电脑鼠标、触摸屏(手机)等客户个人行为的个人行为认证技术,其中Google reCAPTCHA是最完善的一种。
根据以上区分客户和网络爬虫的技术,网站的维护者最不应该做的就是禁止详细的ip地址,或者对这个ip的访问客户施加高韧性的短信验证码。这样,攻击者除了购买ip代理池来抓取网站信息,别无选择,否则详细的ip地址非常容易被封印,无法抓取。爬取和反爬取的门槛已经提升到ip代理池的经济开发成本方面。
智能机器人协议
另外,网络爬虫抓取的技术领域还有一种“白道”方式,叫做robots协议。可以在网站的根目录下浏览obots.txt。比如我们来讨论一下github的智能机器人协议。允许和不允许确认每个UA网络爬虫的抓取权限。
然而,这只是君子协定。虽然有法律上的好处,但也只能限制这些为百度搜索引擎提供商业服务的网络蜘蛛。你无法从多方面限制这些“野爬虫”。
写到最后
毕竟网页的抓取和反击是一个魔高一尺道高一丈的catch me if you can。你不太可能用某项技术完全挡住爬虫的路。你能做的只是增加网络攻击的抓取成本,保证对未授权的个人抓取行为有更准确的认知。
其实本文提到的防御短信验证码是一个复杂的技术问题。我有兴趣在这里留个伏笔,希望文章内容之后再详谈。
另外,热烈欢迎对爬虫感兴趣的朋友来关心我的一个开源项目,webster。新项目通过将Node.js与chrome headless相结合,完成了一个可扩展的爬虫技术抓取架构,进而chrome具备了3D渲染网页的能力,可以抓取一个网页中所有js和ajax3D渲染的多线程内容;结合redis,完成一个日常任务序列,促进网络爬虫方便地扩展横向和纵向分布式系统。
创作者:5u9ar
联系方式:https://juejin.im/post/5a22af716fb9a045132a825c
想了解更多学习培训的Python知识结构,可以看看大家花了一个多月几百个小时梳理出来的几十个知识点管理系统:
【充实整理】《Python自动化全方位开发从入门到精通》交给http://www.magedu.com/73198.html【复制网址获取】