BOTO在AWS之间分发抓取任务

时间:2014-02-19 20:58:39

标签: python amazon-web-services cron queue boto

我需要从网站上抓取200,000个网址。该网站有一个非常严格的抓取政策,如果刮取频率为10+ / min,您将被阻止。所以我需要控制自己的步伐。我正在考虑启动一些AWS实例(比如3)并行运行。

通过这种方式,收集所有数据的估计时间将是:

200,000网址/(10网址/分钟)= 20,000分钟(仅限一个实例) 4.6天(三个实例)

这是完成工作的合理时间。

但是,我正在考虑使用boto构建框架。在这种情况下,我有一段代码和一个输入队列(URL列表)。同时我也不想对他们的网站造成任何损害,所以我只想在夜间和周末刮伤。所以我想所有这一切都应该控制在一个盒子上。

代码看起来应该像这样:

班级工人(工作,队列)     url = queue.pop()     aws =新的AWSInstance()     结果aws.scrape(url)     返回结果

worker1 = new worker() worker2 =新工人() worker3 = new worker()

worker1.start() worker2.start() worker3.start()

上面的代码完全是伪的,我的想法是将工作传递给AWS。

问题: (1)如何使用boto将变量/参数传递给另一个AWS实例并启动脚本来处理这些变量并使用boto将结果检索回主盒。 (2)仅在Python代码中的特定时间段安排作业的最佳方法是什么。 说只能在每天下午6:00到6:00工作......我认为Linux crontab在这种情况下不符合我的需要。

很抱歉,如果我的问题更具口头描述性和哲学性。即使您可以提供任何提示或丢弃一些符合我需要的包/库名称。我将不胜感激!

1 个答案:

答案 0 :(得分:1)

  

问题:(1)如何使用boto将变量/参数传递给另一个   AWS实例并启动脚本以处理这些变量

使用共享数据源,例如DynamoDB或消息框架,例如SQS

  

和..使用boto将结果检索回主箱。

再次,共享数据源或消息传递。

  

(2)仅在特定时间安排工作的最佳方式是什么   Python代码中的句点。说只能在下午6:00到6:00工作   每天...我认为Linux crontab不符合我的需要   情况。

我认为crontab非常适合这里。