0×00 前言
0×01 介绍
0×02 问题的分类
0×03 顺从的艺术
0×04 反爬虫
0×05 Anti-Anti-Spider
0×06 爬虫编写注意事项
0×07 反馈与问题
0×00 前言
在关于爬虫技术点的一系列文章完成之后,想到由一个读者在评论区留言希望了解一下爬虫和反爬虫的内容,在自己准备一番之后,准备就这个问题进行一些介绍,希望能帮到希望了解这一方面的读者。
0×01 介绍
爬虫对于网站拥有者来说并不是一个令人高兴的存在,因为爬虫的肆意横行意味着自己的网站资料泄露,甚至是自己刻意隐藏在网站的隐私的内容也会泄露。面对这样的状况,作为网站的维护者或者拥有者,要么抵御爬虫,通过各种反爬虫的手段阻挡爬虫,要么顺从爬虫,自动提供可供爬虫使用的接口。对于这两种决策的正确与否,实际上是有一些讲究的,作为一个电商平台来讲,某种程度上来说还是希望爬虫在自己网站上工作但是却不希望爬虫的工作影响了平台的运营,但是这就有一个问题了,也就是前几篇文章中有读者问道的,如何减轻爬虫造成的损失。作为搜索引擎来讲,实际上工作在搜索引擎上的爬虫可能是道德缺失的,实际上,搜索引擎作为非常专业的爬虫,尊崇爬虫道德准则,但是不希望自己同类获取自己辛苦收集的信息,同样这样也就是说,作为搜索引擎来讲,可以说是绝对反爬虫的
0×02 问题的分类
那么,由我们上面的叙述,对于爬虫的策略也就有:
1. 顺从但减轻损失
2. 爬虫反制
0×03 顺从的艺术
可能有人会觉得可笑,为什么要顺从?很简单,记得我们以前使用的sitemap么?可以说它就是为了爬虫服务,除此之外,我们还要知道推特的开放平台提供了收费的爬虫接口,google也提供了收费的爬虫接口。那么大家觉得这些墙外的事情离我们还是非常的远,那么我就来举一些例子好了,我们经常网购的朋友都使用京东对吧?也许大家还不知道京东有自己的开放平台,可以供爬虫或者是希望获取京东内商家或者商品信息的开发者:
然后我们打开API页面的商品API页面:
我们发现它提供了不少易用的接口,开发者注册以后可以使用,或者处理一下丢给爬虫去使用。同样的淘宝也有相应的平台,但是应该是收费的,就是淘宝开放平台,要在聚石塔调用API才会生效:
大家可以看到,如果你希望获取的是京东或者淘宝的信息,怎么办?自己费力去解析网页并不是一个好办法,再者说,在爬虫开发四中,我们举的例子就是淘宝的例子,一般的爬虫是没有办法爬到淘宝页面的,这也就从某种程度上解释了为什么百度很难收到淘宝的商品信息什么的,当然不是说百度没有动态爬虫这项技术。
读者会发现,如果我们要使用这些爬虫,就要遵守商家约定的规则,注册甚至是付费才能使用。
其实这就是一个本部分讲的一个平衡点,作为一只爬虫,如果想要在某个网站工作,就必须遵守网站的规则(robots.txt协议,开放平台API协议)。
当然如果爬虫制造者觉得不爽,当然可以有别的办法啊,但是代价就是你要针对这个网站写不少爬虫代码,增加自己的开发成本,也不能说得不偿失,只是你有了汽车为什么还偏爱自行车呢?当然自行车和汽车也是有优劣之分的:顶多也就是比赛竞速用的自行车和一辆小奥拓的差别吧。
0×04 反爬虫
但是你是真的真的很讨厌爬虫,你恨不得有一万种措施挡住爬虫,那么同样的,有些措施可以起到很好的效果,有些措施可能起不了多大的作用,那么我们现在就来讲一下反爬虫的几重措施。
1. IP限制
如果是个人编写的爬虫,IP可能是固定的,那么发现某个IP请求过于频繁并且短时间内访问大量的页面,有爬虫的嫌疑,作为网站的管理或者运维人员,你可能就得想办法禁止这个IP地址访问你的网页了。那么也就是说这个IP发出的请求在短时间内不能再访问你的网页了,也就暂时挡住了爬虫。
2. User-Agent
User-Agent是用户访问网站时候的浏览器的标识
下面我列出了常见的几种正常的系统的User-Agent大家可以参考一下,
并且在实际发生的时候,根据浏览器的不同,还有各种其他的User-Agent,我举几个例子方便大家理解:
safari 5.1 – MAC
User-Agent:Mozilla/5.0 (Macintosh; U; IntelMac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1Safari/534.50
Firefox 4.0.1 – MAC
User-Agent: Mozilla/5.0 (Macintosh; IntelMac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Firefox 4.0.1 – Windows
User-Agent:Mozilla/5.0 (Windows NT 6.1;rv:2.0.1) Gecko/20100101 Firefox/4.0.1
同样的也有很多的合法的User-Agent,只要用户访问不是正常的User-Agent极有可能是爬虫再访问,这样你就可以针对用户的User-Agent进行限制了。
3、 验证码反爬虫
这个办法也是相当古老并且相当的有效果,如果一个爬虫要解释一个验证码中的内容,这在以前通过简单的图像识别是可以完成的,但是就现在来讲,验证码的干扰线,噪点都很多,甚至还出现了人类都难以认识的验证码(某二三零六)。
嗯,如果一个爬虫要访问的页面提示要输入验证码,那么问题就来了,不是所有的爬虫都装备了图像识别技术啊。其实大家要问了,爬虫处理这些登录页面有什么意义呢?除非你是想爆破密码或者是刷xxx什么的。但是真的有人把验证码用在反爬虫上的么?事实上确实有,Google就在使用,如果有使用google经验的读者会发现自己在愉快查google,特别是使用vpn或者是各种科学上网工具的时候,经常会提示你google想知道你是不是一个人(不是人还能是什么?)
不是所有的爬虫都可以配备OCR技术,所以自然这样可以很好的抵挡爬虫。(当然如果你有兴趣编写一个具有机器学习的OCR技术的爬虫的话,这样可能会有一些正确率,笔者有一段时间还是很想通过OCR技术解决验证码问题,但是尝试一点获得失败之后并没有新的进展,于是就放弃了)
4. Ajax异步加载
网页的不希望被爬虫拿到的数据使用Ajax动态加载,这样就为爬虫造成了绝大的麻烦,如果一个爬虫不具备js引擎,或者具备js引擎,但是没有处理js返回的方案,或者是具备了js引擎,但是没办法让站点显示启用脚本设置。基于这些情况,ajax动态加载反制爬虫还是相当有效的。具体的例子有很多,比如淘宝(在上一篇文章中我们有解释)。.
5. Noscript标签的使用