1.随机休眠
在爬虫的工作过程中,自然是爬得越快越好,但是如果你的目标网站有比较完善的防爬系统,而你却只有一个对外IP地址。那么在这个时候你就应该考虑到随机休眠,而不是定时休眠。当一个真实用户在浏览某个网站的过程中,发生的每一次操作、页面跳转应该都是无时间规则的。所以我们在爬虫中应该模拟真实用户的这一特征
2.User-Agent
往往我们都会写一堆 User-Agent,然后在每次请求的时候随机选择一个添加到请求头中来达到伪装的目的,其实这样的做法并不是好,为什么呢?你想想如果是一个真实用户在浏览某个网站的时候,他并不会勤快到变化着浏览器来操作,在真实用户的操作过程中,某一系列的操作应该都是来自同一浏览器的,我举个简单的例子:现在爬虫有一个步骤是从商品列表页面到商品详情页面,在请求列表时 User-Agent 为 Chrome,但在请求详情时 User-Agent 为 Firefox。在这个例子中我可以准确的断定这次操作不是真实用户。所以简单的爬虫程序将 User-Agent 写成硬编码,往往会比随机从一堆中去选择要好,而复杂的爬虫系统则需要考虑将一系列操作标志为相同的 User-Agent
3.高匿代理
如果你不希望目标网站发现你在爬他的网页,甚至不希望他发现你访问了他,那么你可以用 VPN 或者 高匿代理,这两种方案从某个方面来说是一个意思。如果使用 VPN 那你可能会遇到某些问题,比如访问不了内网的数据库等等,但使用 VPN 是一种简易的方案。第二种方案是使用高匿代理,比较繁琐,如果你有IP库那就很好办,否则你得去网上找免费 IP 代理网站去爬他们提供的 IP,那你得为此专门写一些代码去实时获取他们的 IP,还需要实时测试他们提供的 IP 是否有效,然后集成到你的爬虫中
4.中央缓存
为了节省公司的带宽资源,你可能写过一个缓存函数或者类将每次请求的返回内容保存到本地,然后把这个类拷给其他同事,没错,这样子是可以得。但这样没有发挥最大的效果,你可以思考一下,如果你要请求网页 A,但是你的同事在上一秒钟已经成功请求过了,但由于这个网页的缓存在你同事的电脑中,所以你不得不重新发起请求。如果有条件,可以搭建一个中央缓存库,你和其他同事的所有爬虫请求都由中央缓存库来控制,这样就可以共享缓存,至于如果来搭建这么一个中央缓存库你可以自己动动脑筋,网络上关于中央缓存的资料并不多
5.进度可视
在爬虫工作过程中,我们应当将爬虫的进度简单明了的输出,方便我们自己了解爬虫的运行状态以及速度,不要写成爬完一个页面就打印一个 “ a ” 或者输出其他什么乱七八糟的,即使你写个计数器每次打印计数器的值也比打印一个 “ a ” 要好很多,最好是可以以进度条或者其它更优雅的方式输出,简单明了
爬虫的知识还有很多很多,像Selenuim、PhtomJS等等这些就不说了。在我认为爬虫不是伪装,而是模仿,模仿真实用户的所有特征