爬虫,反爬虫,反反爬虫……魔高一尺,道高一丈。无穷无尽的进化抗争史。
入门级反爬虫:验证一下Headers里面的一些参数,设定一下访问IP的阈值等。
中高级反爬虫:添加验证码,前端js渲染、异步加载,注册扫码登陆填手机号,投毒,蜜罐等。
次终极反爬虫:人工智能全流量监控。
终极反爬虫:目前还不知道,如果需要肯定会有。
Headers参数
-
user-agent
这是表明你是一个什么东西,搜索引擎的蜘蛛、用户的浏览器类型等等
-
referer
这个表明你的这次请求是来自哪里的。
-
cookie
cookie可以说是一个身份的象征,一个cookie可以包含很多信息,而且每一个cookie是和服务器端的session一一对应的。不同的网站反爬的规则不尽相同,有简单的,也有难的。如果不允许设置cookie可能十几次或者几十次之后就拒绝访问了。如果使用代理,可能还要维护一个ip和cookie对应表,同时还要注意cookie的变化以及过期等事情,相当麻烦。
代理IP
-
伪装IP
有的网站可能并不去验证真实ip,可以在X-Forwarded-For中伪造ip。
-
代理IP池
这部分相对简单一点,网上有大量的免费代理,甚至还有api提供,不过既然是免费的,你用别人也能用,稳定性和速度几乎不能保障。某宝上各种代理ip,价格在十几到几十不等,没买过,据说稳定性也不太强。
-
vpn
相对于代理,vpn具有非常好的稳定性,但是更换的过程比较缓慢,所以适用于跟换次数少,但是网速要求高的。
-
ADSL拨号
爬虫界的大招,成本稍微高点,不过ip多-数万,速度快,1-10M。缺点,更换一次ip大概需要10秒钟,而且还要设置好断线重拨,动态ip追踪,远程硬件重置等。
-
Tor
匿名网络,该方法的采集速度是比较慢的,一个请求要从美国到俄罗斯到希腊最后再回来..优点是绝对的匿名(仅限于反爬虫)。适用于单独请求,网速要求低的情况。
高级
这部分主要是提高获取数据的门槛,登陆不进去就无法获取数据、获得到数据却不容易提炼出数据、提炼出数据却包含无效数据假数据,清洗不易;更有甚者让其进入蜜罐。
-
验证码
这里又将是无尽的抗争进化史了。刚开始是纯数字的静态图片,然后稍难一点的数字加汉字或涉及语义的静态图片,之后静态变成动态的了,然后还有模拟人类行为的手势操作,非人类的12306验证码。破解验证码的技术也在不断发展,最初的人工一个一个,之后接入打码平台,到现在兴起的人工智能。效率和准确率不断提升。
-
非人性前端代码
前端代码一点都不是正常人的,简单一点的把各个数据进行拆分打乱,并且加入一些无用的数据,但是显示给客户的依然是正常的,有的甚至将数据直接换成图片显示。像这种对于用户体验、SEO优化来说,简直没谁了,像这种杀敌一千自损八百,我是不太赞成的。
-
js各种神操作
对于js这一块,不仅有你想不到的,更有你做不到的。不是有一句话是这么说的吗:每天一道反爬题,轻轻松松学前端。简单的有将数据通过js渲染来输出,有的可能可能通过ajax异步传输,并且将数据在一个iframe中显示。什么?你说这个很简单,通过Selenium+PhantomJS/Chrome,获取渲染后的页面即可。我说性能低下,你说没问题,鉴于PhantomJS的一些Bug,采用Selenium+Chrome+virtualenv,多进程、异步等往上堆技术,就可以解决的。那我还说了,通过特征提取,人操作的浏览器和Selenium驱动的headless浏览器还是不一样的,比如说插件数、语言、WebGL供应商和渲染器等等,还有很多刁钻的,又该如何?不过还真有解决办法。
-
投毒
这一方面可以做的事情也比较多,可以给他们一些假数据,就是比较损。
-
心理战
赢得这场爬虫与反爬虫这场战争,最好的办法是不费一兵一卒,让尔等屈服。打打杀杀的多不好,大家都是文化人。没事互相写两行注释等,套路一下。弄一个蜜罐,你要啥我给你啥还不行吗,要啥自行车。
次终极
这部分发展还并不完善(但是一定有在做的),一个是人工智能刚起步,另一个是全流量,每一Bit流量的前世今生都会进行监控,成本太高。
额外的话:
如果pc端的网页太难,不妨试试手机端的,另外还可以看看app端的和微信小程序的。
做人要厚道,别分分钟几百万上下访问量,慢一点,再慢一点。
大家都是程序员,混口饭吃而已。男人何苦为难男人,说不定下一秒你就从反爬虫变成爬虫工程师呢。不过说真的,真的没必要死磕对方。从商业的角度来说也是这样的,你挡住了99%的爬虫就可以了,没必要花费大量的人力物力去啃那1%的硬骨头,支出和收益不成正比啊。当然,不为别的,就为了面子,死磕到底也是可以的。