2012-03-10 65 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]。您也可以考虑在控制台上打印某些内容,让用户知道链接无效。