我需要从网站上抓取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在这种情况下不符合我的需要。
很抱歉,如果我的问题更具口头描述性和哲学性。即使您可以提供任何提示或丢弃一些符合我需要的包/库名称。我将不胜感激!
答案 0 :(得分:1)
问题:(1)如何使用boto将变量/参数传递给另一个 AWS实例并启动脚本以处理这些变量
使用共享数据源,例如DynamoDB或消息框架,例如SQS
和..使用boto将结果检索回主箱。
再次,共享数据源或消息传递。
(2)仅在特定时间安排工作的最佳方式是什么 Python代码中的句点。说只能在下午6:00到6:00工作 每天...我认为Linux crontab不符合我的需要 情况。
我认为crontab非常适合这里。