注册
登录
提问时间:2019/7/24 14:31:42    楼主:未知网友   阅读量:76

很多朋友认为,只要有了高质量代理IP,什么反爬虫策略都不怕,弹指间给我灰飞烟灭;如果不能灰飞烟灭,那么代理IP就不是高质量的,是劣质产品。事实真的是这样吗?让我们来看看反爬策略有哪些吧,是不是只要有了高质量代理IP,就可以大吉大利、万事大吉了呢?

一、通过User-Agent来控制访问:

无论是浏览器还是爬虫程序,在向服务器发起网络请求的时候,都会发过去一个头文件:headers,比如知乎的requests headers:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

Accept-Encoding:gzip, deflate, sdch, br

Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,da;q=0.2,la;q=0.2

Cache-Control:max-age=0

Connection:keep-alive

Cookie: **********

Host:http://zhuanlan.zhihu.com

Referer:Ehco - 知乎

Upgrade-Insecure-Requests:1

User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

Query String Parameters

view source

view URL encoded

 

这里面的大多数的字段都是浏览器向服务器”表明身份“用的,对于爬虫程序来说,最需要注意的字段就是:User-Agent,很多网站都会建立 user-agent白名单,只有属于正常范围的user-agent才能够正常访问。

解决方法:

可以自己设置一下user-agent,或者更好的是,可以从一系列的user-agent里随机挑出一个符合标准的使用。

二、通过IP限制来反爬虫:

如果一个固定的ip在短暂的时间内,快速大量的访问一个网站,那自然会引起注意,管理员可以通过一些手段把这个ip给封了,爬虫程序自然也就做不了什么了。

解决方法:

比较成熟的方式是:IP代理池

简单的说,就是通过ip代理,从不同的ip进行访问,这样就不会被封掉ip了。

可是ip代理的获取本身就是一个很麻烦的事情,网上有免费和付费的,但是质量都层次不齐。如果是企业里需要的话,可以通过自己购买集群云服务来自建代理池,也可以购买站大爷独享IP池

三、通过JS脚本来防止爬虫:

这个可以说是终极的办法了,因为,爬虫终归只是一段程序,它并不能像人一样去应对各种变化,如验证码,滑动解锁之类的。

举个例子:如果想爬取某个网站,但是在进入网站之前,它会有一个验证页面来验证你是不是机器。

它是怎么验证的呢:

它会通过js代码生成一大段随机的数字,然后要求浏览器通过js的运算得出这一串数字的和,再返回给服务器.

可想而知,这么简单和最基础的一个验证步骤,会是写的代码完成不了的。

解决方法:

这里就要请出一个大杀器:”PhantomJS“。

四、通过robots.txt来限制爬虫:

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。

robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。

解决方法:

wiki上说的已经很清楚了,这实际上只是一个”君子协议“,遵守与否,都在于爬虫的编写者,这里建议大家遵守robots协议。

通过以上四点可以看出,IP限制只是反爬虫策略中的一种,反爬虫策略不仅仅是IP限制,也不仅仅是以上四点,还有其他的各种策略,这里就不一一列举了,不同的网站有不同的反爬策略,这就需要各位去一一探索了。