2012-03-10 68 views
0

我一直在練習使用Mechanize和Nokogiri編寫一些Ruby scrapers。例如在這裏(但是,似乎在發出一定數量的請求(在這種情況下約爲14000)之後,出現錯誤提示我有連接超時錯誤:Ruby機械化連接超時

/var/lib/gems/1.8/gems /net-http-persistent-2.5.1/lib/net/http/persistent/ssl_reuse.rb:90:in`initialize':連接超時 - connect(2)(Errno :: ETIMEDOUT)

我有我可以得到的最好答案是,我向服務器發出太多請求,有沒有辦法通過限制或其他方法來解決這個問題?

+0

請參閱此主題有關節流:http://stackoverflow.com/questions/9241625/regulating-rate-limiting-ruby-mechanize也考慮回落到版本1.0,它不使用持久http連接 – pguardiario 2012-03-10 06:01:09

+0

版本1.0 for機械化還是Nokogiri? – ZenBalance 2012-03-16 06:46:23

+0

機械化,對不起 – pguardiario 2012-03-16 08:28:25

回答

0

經過一些更多的編程經驗,我意識到這是我的一個簡單的錯誤:我的代碼沒有捕獲錯誤t當鏈接被破壞時,適當地移動到下一個鏈接。

對於遇到類似的問題,任何新手Ruby程序員:

連接超時錯誤通常是由於無效鏈接等網頁上被廢棄。

你需要用正訪問在一份聲明中的鏈接,如下面

begin 
    #[1 your scraping code here ] 
rescue 
    #[2 code to move to the next link/page/etc. that you are scraping instead of sticking to the invalid one] 
end 

例如代碼,如果你有一個for循環的迭代環節,從每一個環節中提取信息,然後應該在[1],並且代碼移動到下一個鏈接(考慮使用諸如「下一個」的紅寶石)應該放置在[2]。您也可以考慮在控制檯上打印某些內容,讓用戶知道鏈接無效。