爬虫的固定套路也就那么多,但反爬虫的套路却因不同网站而不同。所以,不同的网站的反反爬虫策略也不一样,这也是令诸多爬虫工程师头疼的问题,不能一劳永逸,只能见招拆招,同时还不能影响爬虫效率。

一、使用代理IP
大规模爬虫使用兔子代理IP是必须的,不然将寸步难行。使用代理IP有两点好处:一是可以降低单IP单位时间内的访问频率,单IP的访问总次数,降低被封危险;二是即使IP被封了,还可以用其他的代理IP继续进行爬虫工作。
二、加上headers参数
加headers参数是最基础的爬虫手段,一般都会收集一堆User-Agent,然后随机使用,这样就可以伪装成自然的浏览器用户,蒙混过第一关。反爬策略严格一点的,还得加上其他的参数,比如cookie等。
三、访问页面随机延时
大规模爬虫会访问到很多网页,每个页面的访问时间不能一样,这样很容易被识别。不同的用户访问习惯不同,所用的时间也不相同,所以,为了伪装的更逼真,每访问完一个页面,应该随机延时1-10秒,这样就无迹可寻了。
四、验证码处理
有的网站当访问次数达到其设定的阈值时就会出现验证码,或者本身就需要验证码登陆,虽然很多编程语言都有自动识别图像的包,但也只能识别最基础最简单的,对于大部分的网站的验证码都无能为力。除非必要尽量不要去触发验证码,万一触发了,也只能找人工打码平台帮忙了。
五、JS代码处理
上面几种反爬策略还好,可以想办法应付,然而最丧心病狂的反爬虫策略莫过于JS代码了,逻辑十分复杂深奥,简直不让人活,遇到这种JS策略,也只能模拟浏览器了。模拟浏览器其实就是一种自动的浏览器访问,与正常的用户访问很类似,所以可以跳过大部分的反爬机制,因为装得实在太像正常用户;不过缺点也很明显,就是慢。
当然,反爬虫策略不仅仅是以上几种,各种各样的反爬机制只有在爬取了各种各样的网站后才能见识到,只要身经百战,何惧反爬机制,破解了各种各样的反爬策略后,才会有一种“与天斗,与人斗,与反爬虫斗,其乐无穷”的境界。