2014-02-19 41 views
0

之間的任務我每年有二十萬的網址,我需要從一個網站刮。這個網站有一個非常嚴格的抓取政策,如果抓取頻率爲10+ /分鐘,你將被阻止。所以我需要控制自己的節奏。我正在考慮啓動一些AWS實例(比如3)並行運行。BOTO分發刮AWS

以這種方式,所估計的時間,以收集所有的數據將是:

200000 URL /(10 URL /分鐘)= 20,000分鐘(一個實例只) 4.6天(三個實例)

這是合理完成工作的時間。

不過,我想建立使用博託的框架。在這種情況下,我有一段代碼和一個輸入隊列(URL列表)。同時我也不想對他們的網站造成任何損害,所以我只想在晚上和週末刮。所以我想所有這些都應該在一個盒子上進行控制。

和代碼應該是這樣的相似:

類工人(工作,隊列) URL = queue.pop() AWS =新AWSInstance() 結果aws.scrape(URL) 返回結果

worker1 =新的工作() worker2 =新的工作() worker3 =新的工作()

worker1.start() worker2.start() WO rker3.start()

上面的代碼完全是假,我的想法是把工作傳遞給AWS。

問題: (1)如何使用boto將變量/參數傳遞給另一個AWS實例,並啓動一個腳本來處理這些變量,並使用boto將結果返回到主框。 (2)什麼是僅在Python代碼中的特定時間段內安排作業的最佳方式。 說只工作在每天下午6:00至上午6:00 ...我不認爲在這種情況下Linux的crontab將符合我的需要。

對不起,如果我的問題是更多的口頭描述和哲學。即使你可以給我任何提示或扔掉,以滿足我的需要一些包/庫名。我將不勝感激!

回答

1

問題:(1)如何使用boto以變量/參數傳遞給另一個 AWS實例,然後啓動一個腳本來對這些變量

使用共享數據源,如DynamoDB或通訊工作框架如SQS

並..使用boto檢索結果返回到主框。

同樣,共享數據源,或消息。

(2)什麼是在Python代碼中僅在特定時間 時間段內安排作業的最佳方式。說每天只工作在下午6:00到6:00 每天...我不認爲Linux的crontab將符合我的需要在這個 的情況。

我認爲crontab適合在這裏。