2016-11-06 5 views
-1

私はプログラミングに全く新しいので、私に同行してください。ダイナミックコンテンツで約50,000のWebページを削りたい私はRubyにWatirとNokogiriを使ってこれを行うスクリプトを書いたが、動的コンテンツが見えるようにするには7秒かかる。だから、一度に1ページをこすったら、私は100時間近く要します。watirでダイナミックページのスクラップを高速化するにはどうすればよいですか?

明らかに私は同時に2つまたは3つの別々のスクリプトを実行できますが、これを行うにはより効率的な '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を持つ変数がある場合は、次のURLを取得するためにスレッドをurls.popに実行します。競合状態(つまり、同時に2つのスレッドpopのURLがあり、同じ値になる可能性があります)がある可能性があります。これが問題になる場合は、並列(対並行)コードを書くためのアドバイスについては、https://www.toptal.com/ruby/ruby-concurrency-and-parallelism-a-practical-primerを参照してください。

関連する問題