网页抓取以及一些防范的方法

    随着互联网的兴起,网页抓取已经被越来越多的人所应用,可以用来做各种白色的,黑色的,灰色的程序。典型的如一淘就是正大光明的去抓取电商之间的价格来作对比。

    然而,作为服务器端来说,网页抓取就是噩梦,一方面增大了服务器的压力,另一方面用机器人做了很多应该被禁止去做的事。

    如何防范他们,我想,是现在服务器端一个需要研究的课题。这里就总结一下各种防范的措施。

    如果严格的定义这个问题,我们就是要做人机识别。也就是我们不知道来的请求是人还是机发出来的,但是要根据行为特征或者是一些方法去判断请求到底来自人还是机(这个很像是图灵测试,但并不完全一样)。

    所以,服务器在执行实际任务之前,需要对请求去判断到底是不是来自机器。而这个判断,针对不同机器人的方法方式,又有很多应对方法。

    1. 常规办法。(这里的常规办法,实际上并不能完全应付网页抓取,之所以写下来,是总结一下对于抓取有障碍的地方。)

  •     User-Agent: 通过它可以判断客户端的浏览器,但是客户端可以更改
  •     Referer:一般用它来防盗链,referer指被请求页面的前一页,同样可以被客户端程序总结并利用
  •     Cookie:一般用来做认证,所以这个基本上是许多客户端程序必须要做的事,要么勾住一个已有的cookie来登陆,要么模拟一个新的页面来产生新的cookie
  •     HTTPS:一般用来防止半路被人截取消息,但是如果你本身也是客户端的话……你可以直接去解密消息,甚至附上需要的证书


     2.验证码,上面讲的方式都可以被客户端程序利用,究竟什么方式才可以阻止机器呢?一个已经被广为接受的方式就是使用验证码。验证码是个比较好的方式,但是,真正要设计好却不太容易。

  •      比较差的方式见参考2,这样的验证码通常是防不住聪明的客户端的。
  •      另一种极端的方式即复杂到人都快要辨识不出来的,会带来很差的用户体验。
  •      所以,稍好一点的方式是提出有一定智能才能回答的问题,比如新浪微博会问“黑龙江的省会”之类的常识性问题。(还有的会问1+1=?,我相信这也是很容易识别的)
  •      当然,现在还有的方式是结合广告的验证码,这样还把商业模式也融入其中,比较典型的如:XX银行存款已经突破2亿,然后将其中银行两个字标成红色,剩下的蓝色,并要你输入红色的字。


     但是验证码并非万能和一劳永逸的,首要的一点就是要考虑用户体验,不能用在所有的地方,只能用在关键性的入口

     于是客户端程序又蠢蠢欲动了,只需要把验证码抓回来给人输入一次,后面便畅通无阻。

     3.冻结IP,针对客户端程序频繁或者并发抓取的特征,可以将频繁或抓取的ip封锁(有的服务器提供配置),比如说一个网页正常人来操作需要0.7ms以上,但是客户端程序却能够0.3ms请求一次,这种频繁请求就能被判断作机器刷新,于是一个新的方式就是在系统全局范围内记录ip(比如hashtable或者memcache)以及访问时间,当访问时间较短时就暂时冻结该ip过来的请求。


     好吧,道高一尺魔高一丈,客户端这时候就会采用多IP或者代理来访问(即分布式的客户端)

     4.多IP的冻结,应当明白,多IP同样会有行为模式。比如来自同一个网段,一旦发现,可以封锁整个网段(虽然比较愚蠢),有的爬虫采用定时轮转,也很容易发现(时间比较规律,请求数量同样很大)。


     于是又有的爬虫开始丢弃这些模式,并把自己伪装得更像人

     5.利用js执行。大多数客户端程序都是直接请求html,同时只执行html而并不执行javascript(难度比较大),于是,可以在请求的js里面放入一段js,正常执行时该js会访问服务器端并留下一个痕迹,但是如果是爬虫,就会发现大量的请求后不会留下该痕迹,于是,封之。


     上面说了,是大多数客户端程序。也就是说还有少数更聪明的。利用浏览器内核(比如webkit)或者配合js引擎(比如v8)来抓取……

     6.。。。貌似人类已经很难阻止了爬虫了,如果要说阻止,那同样还是抓取量是一个比较明显的特征(因为爬虫不可能像人一样那么慢,否则海量网页很难完成)


    参考:图灵测试 http://baike.baidu.cn/view/94296.htm

                简单的验证码  http://xiaoxia.org/2011/08/04/discussion-on-certain-webpage-code-and-bypassing-validation/

                防爬总结 http://www.cnblogs.com/xoray007/archive/2011/11/22/2258366.html

                另一篇python如何爬网页的文章 http://www.pythonclub.org/python-network-application/observer-spider

                反爬虫的实践 http://robbinfan.com/blog/11/anti-crawler-strategy

                 Pholcus(幽灵蛛) https://juejin.im/entry/59b1f6f66fb9a024780510f6?utm_source=gold_browser_extension


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值