我有一个抓取工具,抓取几个不同的域以获取新帖子/内容.内容总量为数十万页,每天都会添加大量新内容.因此,为了能够浏览所有这些内容,我需要我的爬虫全天候爬行.
目前我将爬虫脚本托管在与爬虫正在添加内容的站点相同的服务器上,并且我只能在夜间运行cronjob来运行脚本,因为当我这样做时,网站基本上停止工作,因为加载脚本.换句话说,一个非常糟糕的解决方案.
所以基本上我想知道这种解决方案的最佳选择是什么?
是否有可能继续从同一主机运行爬虫,但以某种方式平衡负载,以便脚本不会杀死网站?
我将寻找什么样的主机/服务器来托管爬虫?除普通网络主机外,我还需要其他任何规格吗?
抓取工具会保存抓取的图像.如果我在辅助服务器上托管我的爬虫,如何将我的图像保存在我的站点的服务器上?我想我的上传文件夹上不需要CHMOD 777,并允许任何人将文件放在我的服务器上.
Marcus Lind.. 7
我决定选择亚马逊网络服务来托管我的爬虫,它们既有队列的SQS,也有自动扩展的实例.它还有S3,我可以存储我的所有图像.
我还决定将我的整个爬虫重写为Python而不是PHP,以便更轻松地利用队列之类的东西,并使应用程序保持100%的时间,而不是使用cronjobs.
所以我做了什么,它意味着什么
我为我的爬虫设置了一个Elastic Beanstalk应用程序,该应用程序设置为"Worker"并侦听SQS,我存储了所有需要爬网的域.SQS是一个"队列",我可以保存每个需要爬网的域,爬虫将一次监听队列并获取一个域,直到队列完成.不需要"cronjobs"或类似的东西,只要队列将数据输入其中,它就会将其发送给爬虫.这意味着爬虫在100%的时间内全天候运行.
应用程序设置为自动缩放,这意味着当我在队列中有太多域时,它将设置第二个,第三个,第四个等...实例/爬虫来加速该过程.我认为对于想要设置爬虫的人来说,这是非常非常重要的一点.
所有图像都保存在S3实例上.这意味着图像不会保存在爬网程序的服务器上,并且可以轻松获取和处理.
结果很棒.当我每隔15分钟在cronjobs上运行一个PHP Crawler时,我每小时可以爬600个网址.现在我可以毫无问题地每小时抓取10'000 + url,甚至更多取决于我如何设置自动缩放.
我决定选择亚马逊网络服务来托管我的爬虫,它们既有队列的SQS,也有自动扩展的实例.它还有S3,我可以存储我的所有图像.
我还决定将我的整个爬虫重写为Python而不是PHP,以便更轻松地利用队列之类的东西,并使应用程序保持100%的时间,而不是使用cronjobs.
所以我做了什么,它意味着什么
我为我的爬虫设置了一个Elastic Beanstalk应用程序,该应用程序设置为"Worker"并侦听SQS,我存储了所有需要爬网的域.SQS是一个"队列",我可以保存每个需要爬网的域,爬虫将一次监听队列并获取一个域,直到队列完成.不需要"cronjobs"或类似的东西,只要队列将数据输入其中,它就会将其发送给爬虫.这意味着爬虫在100%的时间内全天候运行.
应用程序设置为自动缩放,这意味着当我在队列中有太多域时,它将设置第二个,第三个,第四个等...实例/爬虫来加速该过程.我认为对于想要设置爬虫的人来说,这是非常非常重要的一点.
所有图像都保存在S3实例上.这意味着图像不会保存在爬网程序的服务器上,并且可以轻松获取和处理.
结果很棒.当我每隔15分钟在cronjobs上运行一个PHP Crawler时,我每小时可以爬600个网址.现在我可以毫无问题地每小时抓取10'000 + url,甚至更多取决于我如何设置自动缩放.