iannil
2014-08-11 14:38:19 +08:00
基本是对的,但一个网页的链接有n多,也就是说你会遇到一个页面开始,然后1*n*n*n这种方式展开的链接个数,同时链接会有重复的,于是如何保存已抓取的链接和如何把满足某些条件的链接筛选出来会是你需要解决的一个新问题。
好了,当你有一个链接处理机制来帮助你管理你抓取的所有链接后,你爬虫的抓取效率变得非常高效,高效到你的爬虫因此被目标网站屏蔽了,你该如何解决?改header头的东西我就不多说了,只说关键的屏蔽ip怎么解决?
你需要将你的爬虫做成分布式,由中央服务器作为任务调度中心,处理抓取的页面,将要抓取的链接分发到各个辖属机器。
辖属机器只做一件事,就是向中央服务器请求任务,并把请求来的任务执行后将结果返回给调度中心。每个辖属机器是一台几十块一年的虚拟机即可,我们要的是辖属机器的ip而已。
好了,现在你由n多个ip分散在n个机器中替你做抓取,数据统一集中在你隐藏在幕后的中央服务器里,效率非常高,一般你控制的好,目标服务器不会发现某个ip请求过于频繁,流量过高,但是事情有可能就是那么变态!目标服务器还是发现了你!把你所有的小爬虫都干掉了!怎么办?
你需要优化调度中心的东西,你的中央服务器不能只简单的把任务平均分给各个辖属机器,你需要实时的监控各个辖属机器的任务数量与执行状态,任务过高的辖属机器得让他歇歇,免得他被干掉,这事为啥不在辖属机器里做呢?因为我们用的是几十块一年的虚拟机啊!!成本啊!!你有钱买几千块一年的机器当我没说啊!!
好了,现在你的任务调度中心很智能的保证每个辖属机器的任务不会过高,如果你嫌效率还是低,再开一个虚拟机就好了。ip也有很多,访问频率和流量你也控制的很好,链接管理也控制的很好,基本上爬虫的框架就有个雏形了。
什么?你只问核心逻辑?那就这些了。