影响采集器速度的因素
影响采集速度的问题有几个:采集器模式是什么,是否支持多线程,机器性能怎么样,你的网速快慢,网站有什么限制...
=采集器模式
采集方案有主要的分支两种,一种是浏览器模式的,一种是直接发HTTP包模式的。
浏览器模式:在软件里打开一个或者多个浏览器,完全模拟用户对浏览器中的网页操作。浏览器打开一个网址,会做这些工作:1.下载该网址对应的网页的HTML代码;解析HTML代码,然后下载HTML代码中的图片;执行HTML代码中的JS脚本,继续做处理。这种模式的好处是,傻瓜化。简单,容易实现。坏处在于,速度慢,不稳定。我们需要的数据要么在html的代码里,要么就在某个ajax的请求里。事实上,浏览器下载的数据中,99%的数据都是与我们需要的数据无关的。这样实际上是很浪费资源的。浏览器的另一个问题就是,历览器本身很复杂,容易卡死,或者判读页面加载完成出错。IE的卡死,大家都是深恶痛绝的。如果网页里的关键数据是用AJAX加载的,那么网页加载状态完成的判断就是一个问题。到底是HTML加载完,就算加载完成了。还是AJAX的请求处理完了,才算完成呢。浏览器模式采集器的这两大缺陷就导致,采集一个网页的时间是秒级的。
HTTP包模式:直接发送HTTP包,不下载图片,不处理无关的HTML和JS,这样速度就会很快。了解了浏览器模式的采集器的原理,我们就知道了有一些途径是可以提升采集器的速度的。最有效的办法,就是只请求必须的数据。这个模式就是为了解决速度慢的问题而衍生出来的。直接发HTTP数据包的模式,优势是,处理速度快,处理一个网页是毫秒级的;占用系统资源少(不用下载图片,不用展示图片,不用运行无关的JS,当然性能页好了);缺陷也很明显,开发复杂度变高了(你必须对HTTP协议理解很深,知道什么是GET什么是POST,什么是编码,怎么从浏览器打开一个网址的几十个请求中找到关键的请求,并加以模拟发送。)
两种模式各有优劣势。基本上,如果你采集的数据很少,你就可以浏览器模式的采集器;要是你采集的数据量很大,你还是老老实实用HTTP包模式的采集器器吧。我们两个模式的版本都有。我们的第一个版本你就是浏览器模式的,后面的这个版本就是HTTP包模式的。现在我们给客户提供的解决方案一般都是HTTP包模式的采集方案。毕竟数据少的话,你掏钱也不划算,不如找个浏览器模式的免费采集器用用,搞定问题就OK了。
=多线程
我们在干活的时候,常常想的问题就是,要是多一个人帮我干活就好了。在软件里,每个线程就类似于一个干活的人。不考虑机器和网站的影响,线程越多,干活的人就越多,速度也就越快。现在一般的采集器都会支持多线程,支持多个任务同时处理,只有少量的采集器不支持多线程。如果你是定制的采集器,有些采集器就不是多线程的。多线程,有点就是速度快;缺点就是处理变复杂了。
网站上自带采集器的一般都是但线程的。现在有些网站在发布的时候,就自带了采集器在里面。有些客户就说不好用,我们分析发现,是PHP的采集器只支持单线程导致的。PHP做采集器是理论上可以支持多并发的,但是会增加许多处理的复杂度。大多数PHP开发人员都不会自讨苦吃去做这件事情。
我们的采集器是支持多线程的。我们做的大多数项目都是支持多线程运行的。不过极个别的网站本身有反采集的限制,就必须是单线程运行,这个就是偶尔几个例外了。
机器性能
机器性能就好比是工厂的大小的一样。多线程的线程数是与机器的性能有直接关系的。工厂大了,容纳的干活的人多了,整体的效率就很好。这个就没有什么取巧的了。当然多个电脑也是一种解决方案。不过,我们的客户大多数都只要一台电脑做采集就可以了。毕竟,直接HTTP包模式加上多线程,速度已经非常快了。
网络速度
网络速度就好比是公路的宽窄。公路越宽,容纳的车流量就越多。这个就没有什么特别的了。在大陆,一般情况下,网速都不是一个问题。但是海外网站的采集,网速就是一个大问题。如果访问海外的网站太慢,或者干脆无法访问,客户就需要自己购买VPN去翻墙。现在一般VPN都会提供许多个服务器。你可以多试几个,找一个相应最快的服务器作为你的VPN服务器。
网站限制
有些网站是有限制的。采集微博数据的时候,喜多数据必须登录帐号后才能看到。同一个帐号反问数据太多,网站就提示你非法访问呢。一些政府网站的稳定性是糟糕的。我们采集某个政府网站的公开的房产信息的时候,开启多线程,线程太多,网站很快就崩溃了。我们开玩笑说,豆腐渣工程不光是道路建设上存在,网站建设上一样存在。遇到这些情况,就必须采用某种方法绕过网站的限制。最稳定的解决方法是降低采集的速度。对于大多数政府公开信息采集来说,也是唯一的方法。对于其他的一些网站来说,可能可以通过代理服务器或者ADSL重置换IP的方法解决一些问题。多帐号登录也是一种解决问题的方法。不过,具体问题具体分析。有反采集的网站,会让采集速度降低一两个数量级的。
结论
综合以上因素,实际采集的速度与具体网站具体相关的。采集器模式,多线程,是我们软件开发人员可以控制的因素。机器性能,网速是客户可以控制的因素。网站限制就是被采集网站本身的特性了,是我们和客户无法控制的。这就导致,有些网站采集很快,有些网站采集很慢。不是我们软件的问题,也不是客户运行软件的环境问题,而是网站本身的限制。有客户就有这样的疑问,看你们百度采集的速度飞快,但是采集我们的项目就慢。问题就在这里了。