2016-11-06 60 views
-1

我完全是編程新手,所以請耐心等待。我想用動態內容來抓取約50,000個網頁。我已經在Ruby中編寫了一個腳本,可以讓我使用Watir和Nokogiri來完成此操作,但是我需要7秒才能看到動態內容。所以,如果我一次只能刮一頁,那麼我需要將近100個小時。如何加快用watir抓取動態頁面?

很明顯,我可以同時運行兩個或三個單獨的腳本,但是有沒有更高效的「Ruby」方法來執行此操作?我從一個普通的桌面工作與Windows 7

回答

0

假設你有一個下載頁面,例如方法:

def get_page 
    url = "some url" 
    page = Nokogiri.parse open url 
    sleep 7 # wait for page to be ready 
    # extract data here 
end 

現在你希望運行N次同時

3.times do 
    Thread.new do 
    get_page 
    end 
end 

線程有很多細微差別,但用法也可以這麼簡單。您可以讓線程從全局變量讀取/寫入,即如果您有一個具有1000個URL的變量,則您有一個線程運行urls.pop以獲取下一個URL。請記住,可能存在競態條件(即同時有兩個線程pop url並且獲得相同的值)。如果這是一個問題,請參閱https://www.toptal.com/ruby/ruby-concurrency-and-parallelism-a-practical-primer瞭解編寫並行(與併發)代碼有關的一些建議。