托管爬虫的最佳解决方案?

时间:2014-03-06 10:17:33

标签: performance webserver hosting web-crawler

我有一个抓取工具,可抓取几个不同的域以获取新帖子/内容。内容总量为数十万页,每天都会添加大量新内容。因此,为了能够浏览所有这些内容,我需要我的爬虫全天候爬行。

目前我将抓取器脚本托管在与抓取工具添加内容的网站相同的服务器上,并且我只能在夜间运行cronjob来运行脚​​本,因为当我这样做时,网站基本停止因为脚本的负载而工作。换句话说,这是一个非常糟糕的解决方案。

基本上我想知道这种解决方案的最佳选择是什么?

  • 是否可以继续从同一主机运行爬虫,但以某种方式平衡负载以便脚本不会杀死网站?

  • 我想要什么样的主机/服务器来托管抓取工具?我需要的其他规格是否比普通的网络主机好?

  • 抓取工具会保存抓取的图片。如果我在辅助服务器上托管我的爬虫,如何将我的图像保存在我的站点的服务器上?我想我的上传文件夹上不需要CHMOD 777,并允许任何人将文件放在我的服务器上。

1 个答案:

答案 0 :(得分:7)

我决定选择亚马逊网络服务托管我的抓取工具,他们既有队列的SQS,也有自动扩展的实例。它还有S3,我可以存储我的所有图像。

我还决定将我的整个爬虫改写为Python而不是PHP,以便更轻松地利用队列之类的东西,并使应用程序保持100%的时间,而不是使用cronjobs。

所以我做了什么,以及它意味着什么

  1. 我为我的抓取工具设置了一个Elastic Beanstalk应用程序,该应用程序设置为“Worker”并侦听SQS,我存储了所有需要抓取的域。 SQS是一个“队列”,我可以保存每个需要爬网的域,爬虫将一次监听队列并获取一个域,直到队列完成。不需要“cronjobs”或类似的东西,只要队列将数据输入其中,它就会将其发送给爬虫。这意味着爬虫在100%的时间内都是24/7。

  2. 应用程序设置为自动缩放,这意味着当我在队列中有太多域时,它将设置第二个,第三个,第四个等...实例/爬虫来加速该过程。我认为对于想要设置爬虫的人来说,这是非常非常重要的一点。

  3. 所有图像都保存在S3实例上。这意味着图像不会保存在爬虫的服务器上,并且可以轻松获取和处理。
  4. 结果很棒。当我每隔15分钟在cronjobs上运行一个PHP Crawler时,我每小时可以爬600个网址。现在我可以毫无问题地每小时抓取10'000 + url,甚至更多,这取决于我如何设置自动缩放。