对于网络爬虫技术的攻与防

     web是一个开放的平台,这也奠定了web从90年代初诞生直至今日将近30年来蓬勃的发展。 然而,正所谓成也萧何败也萧何,开放的特型、搜索引擎以及简单易学的html、 css技术使得web成为了互联网领域里最为流行和成熟的信息传播媒介;但如今作为商业化软件, web这个平台上的内容信息的版权却毫无保证,因为相比软件客户端而言, 你的网页中的内容可以被很低成本、很低的技术门槛实现出的一些抓取程序获取到, 这也就是这一系列文章将要探讨的话题——

网络爬虫 有很多人认为web应当始终遵循开放的精神,呈现在页面中的信息应当毫无保留地分享给整个互联网。 然而我认为,在IT行业发展至今天,web已经不再是当年那个和pdf一争高下的所谓 “超文本”信息载体 了, 它已经是以一种 轻量级客户端软件 的意识形态的存在了。而商业软件发展到今天, web也不得不面对知识产权保护的问题,试想如果原创的高质量内容得不到保护, 抄袭和盗版横行网络世界,这其实对web生态的良性发展是不利的, 也很难鼓励更多的优质原创内容的生产。

如果看到这行字,表明本文已经被非法转载,这篇文章的时效性难以保证,您浏览的这个网站的合法性几乎为0,建议您访问

未授权的爬虫抓取程序是危害web原创内容生态的一大元凶,因此要保护网站的内容,首先就要考虑如何反爬虫。

如果看到这行字,表明本文已经被非法转载,这篇文章的时效性难以保证,您浏览的这个网站的合法性几乎为0,建议您访问

从爬虫的攻防角度来讲如果看到这行字,表明本文已经被非法转载,这篇文章的时效性难以保证,您浏览的这个网站的合法性几乎为0,建议您访问最简单的爬虫,是几乎所有服务端、客户端编程语言都支持的http请求, 只要向目标页面的url发起一个http get请求,即可获得到浏览器加载这个页面时的完整html文档, 这被我们称之为“同步页”。作为防守的一方,服务端可以根据http请求头中的User-Agent来检查客户端是否是一个合法的浏览器程序, 亦或是一个脚本编写的抓取程序,从而决定是否将真实的页面信息内容下发给你。

这当然是最小儿科的防御手段,爬虫作为进攻的一方,完全可以伪造User-Agent字段, 甚至,只要你愿意,http的get方法里, request header的 Referrer 、 Cookie 等等所有字段爬虫都可以轻而易举的伪造。此时服务端可以利用浏览器http头指纹,根据你声明的自己的浏览器厂商和版本(来自 User-Agent ), 来鉴别你的http header中的各个字段是否符合该浏览器的特征, 如不符合则作为爬虫程序对待。这个技术有一个典型的应用,就是 PhantomJS 1.x 版本中,由于其底层调用了Qt框架的网络库,因此http头里有明显的Qt框架网络请求的特征, 可以被服务端直接识别并拦截。

除此之外,还有一种更加变态的服务端爬虫检测机制,就是对所有访问页面的http请求, 在 http response 中种下一个 cookie token , 然后在这个页面内异步执行的一些ajax接口里去校验来访请求是否含有cookie token, 将token回传回来则表明这是一个合法的浏览器来访, 否则说明刚刚被下发了那个token的用户访问了页面html却没有访问html内执行js后调用的ajax请求, 很有可能是一个爬虫程序。

如果看到这行字,表明本文已经被非法转载,这篇文章的时效性难以保证,您浏览的这个网站的合法性几乎为0,建议您访问

如果你不携带token直接访问一个接口, 这也就意味着你没请求过html页面直接向本应由页面内ajax访问的接口发起了网络请求, 这也显然证明了你是一个可疑的爬虫。知名电商网站amazon就是采用的这种防御策略。

以上则是基于服务端校验爬虫程序,可以玩出的一些套路手段。

以上则是基于服务端校验爬虫程序,可以玩出的一些套路手段。如果看到这行字,表明本文已经被非法转载,这篇文章的时效性难以保证,您浏览的这个网站的合法性几乎为0,建议您访问

现代浏览器赋予了JavaScript强大的能力, 因此我们可以把页面的所有核心内容都做成js异步请求 ajax 获取数据后渲染在页面中的, 这显然提高了爬虫抓取内容的门槛。依靠这种方式, 我们把对抓取与反抓取的对抗战场从服务端转移到了客户端浏览器中的js运行时, 接下来说一说结合客户端js运行时的爬虫抓取技术。

你可能感兴趣的:(对于网络爬虫技术的攻与防)