大家好,好久不见了,之前写了一篇爬虫天坑系列的文章,本想继续写下去,没想到可能篇幅太长,废话太多,导致很多朋友感觉帮助不大。因此组织上决定,从这篇文章开始,让我写一些更接地气的文章。
其实很多人都觉得爬虫没什么深奥的技术,但是又觉得想真正写好爬虫却似乎很难。原因就在于爬虫本身的功能简单,而真正难的都在反反爬技术当中。那从今天开始我们一起来聊一聊反爬和反反爬们使用的那些奇技淫巧。
说到反爬,最简单的方法莫过于封IP了,简单有效,还很难破解。这就像门卫大爷问你叫什么,你说你叫周杰伦,下次你再来,你还说你叫周杰伦,那大爷肯定问:“怎么又是你!滚”(这个例子举的有点暴露年龄)。
1.为啥封ip有效?
其实一次网页请求,还有大量的信息,比如UserAgent,比如Cookie。那为啥封ip最有效?是因为其他的信息都可以伪造,但是http请求中却无法直接伪造ip的,了解网络协议的同学们应该知道,http协议基于tcp,而tcp协议存在握手机制的,这样你就绝对无法用假的ip来连接了。就像你要写信给一个小姐姐,然后希望小姐姐回信,但是你却写了一个假的发信地址,那你就是注孤生了。(当然,你可以写一个小哥哥的地址,让小哥哥把收到的信再交给你,这样的话,你能不能收到信,就取决于小哥哥的人品了,当然回到代码里,就是代理服务器的稳定性。)
2.怎么封ip?
我们先来看看老牌论坛程序Discuz的反爬功能-防采集:
非常简单粗暴,一个ip只允许访问多少次,这里默认是200次。也就是说当一个ip访问超过200次就会记入黑名单,限制访问。实现方式也很简单,对于大部分语言来说,获取ip地址都是很简单的,获取到ip之后,将ip作为主键存入数据库中(当然discuz会将ip转换成int来做一些优化,减小主键占用的空间)。最后再加一个字段来记录访问次数就可以了。
当然当我们每天ip数量很多的时候,我们可以考虑存入非关系型数据库中,毕竟我们只需要key-value形式的数据,用关系型数据库反倒浪费了。
3.救命啊,我的爬虫封ip了怎么办?
说完了反爬,我们来说反反爬。爬虫被封ip简直就是所有爬虫工程师必须要迈过去的一道坎,而作为这个行业混迹多年的老司机,对于ip怎么来的问题,那是相当的熟悉。下面一一给大家梳理一下利弊:
自己想办法伪造:赶紧打消这个念头,浪费时间,当年我们给中国移动做爬虫系统,作为运营商,人家都不自己造ip。
从万能的淘宝上买:跟很多人一样,我当年第一次需要ip的时候,也是第一时间求助万能的淘宝。但后来才了解,淘宝上的ip大多都是从专业代理ip厂商买过来,然后进行二次销售,很多过期的,稳定性和可用率可以说是相当的差,如果是做爬虫的基本可以放弃,如果是干其他什么我完全不了解的事情,勉强可以尝试,毕竟比较便宜。
代理IP服务商:现在比较好的几家是:全网代理,tk代理,快代理(不包含一些量小质高,非批量的代理ip服务商)。每家的优点不一样,全网的代理相对质量较高,tk代理数量多,而快代理则有自建的私密代理,但数量不多。这类厂商大部分的代理是通过自己写的ip扫描程序从网上扫来的,质量比淘宝的能好点,用作爬虫的话,需要自己先做一次过滤,大概每天过滤出来的可用的ip大约在1000左右,如果每天爬的网页不多,可以尝试,价格不是特别便宜。另外像是微信爬虫这种,扫描来的ip基本就是废,因为早就被别人用的时候就被封了。
神箭手云爬虫:作为神箭手创始人之一,我对自己的产品从来都是不吹不黑的,神箭手的代理ip怎么说呢,可以说是宇宙之内找不到第二家的存在。我们首先买了三家主流代理ip服务商的所有ip,然后给大家免费用(你没有看错,就是免费用),但是为了爬一些鹅厂,狼厂这类大厂的网页,我们又自建了几百台代理服务器,每天产生40万的私密代理ip(注意是40万是实际ip,不是什么ip池)。价格却便宜到没朋友,给大家对比一下我们和快代理的价格对比:快代理3600元/每月,每天5000ip,神箭手299元/每月,每天40万ip。当然我们也有限制:只有在我们平台上的爬虫才能接入我们的ip。
好了,说了这么多,对于ip限制这种最常见的反爬措施来说,反反爬也可以说是相当的常规,就是买代理,具体买哪一家,就看你自己的情况喽。可以说有了高质量的代理ip之后,80%的爬虫写起来都非常简单了。
下一节我们会带大家一起看看反爬与反反爬的第二常规战斗-验证码
网友评论