从这一小节开始,我们开始了解常用的几个反爬手段.首先是封禁类.我们经常会遇到爬取过度而导致IP被封或者是账号被封。你知道是怎么一回事么? 在这里,我们将详细的了解下我们在什么情况下会遭到此类惩罚。同时,一些常用的判断规则又是什么?一般来说,我们如果触发了反爬系统所设定的条件的话,就会引发封禁.该手段一般设定的标准有这几种:
- 是否携带有一个正常访问下所有的header头,cookies和正常的UserAgent.针对与这种情况,我们只要通过模仿浏览器发送的包,将我们的爬虫所发送的HTTP请求上都挂上和浏览器发送的请求一样的header头和cookie就行。此类标准由于技术难度低,且反爬简易,现在一般不采用此类.
- 根据行为是否表现的像一次人为的操作,诸如不分昼夜的机械化的发送请求,每次只读取特定内容,相隔固定的秒数分秒不差的,都可以认为是一个robot在操作.该类的话,需要我们模拟出一个正常的人类读取网页时的行为,比如使用乱序时间,将爬虫每轮间隔的爬取时间使用随机时间等待这些方法,这么做的话,比较不容易触发规则.
- 在网页源代码中设置一些正常访问看不到的标签,然而爬虫会触发到的标签,从而达到封禁的效果。如果在试验过程中发现这些措施的话,可以通过精准定位的方式(后面所讲的Xpath,selector)来避开那些有毒的代码块.
封禁的标准千千万万,阈值也是每个网站都不同.我们应当在正式爬取之前,先写几个测试用意的爬虫,用来试探该网站的反爬策略,从而决定我们的反反爬措施. 当然还有最终的解决办法,那么就是看封禁的是什么。大多数情况下,封禁的是IP地址,那么这时候我们可以去通过代理IP来无视掉封禁IP的情况.代理IP也就是代理网络用户去取得网络信息.我们如果通过代理IP来获取信息的话,那么就可以无视掉依靠IP封禁的反爬策略.一般基本上主流的HTTP库都提供代理功能.但有利必有弊,通过代理IP进行中转固然可以无视封禁,但代理节点的稳定性和速度就直接影响到整体爬虫的效率.如果该代理节点时常掉线,延时居高不下,那么从最终效果上来看就和不挂代理依靠低速运行来躲避阈值的爬虫一样.如何维持一个延迟低,可用率高的代理IP池不在本文叙述范围内,请自行寻找资料.
总而言之,封禁类中的如何判断是否是爬虫是反爬系统的核心关键所在,确定了是爬虫之后,那么就不光是封禁,可能会有各种手段惩罚或者戏弄你.比如后面讲的投毒,无限循环,伪装404页面等待.敬请期待