0

我一直在练习使用 Mechanize 和 Nokogiri 编写一些 Ruby 爬虫。例如在这里(但是,似乎在发出一定数量的请求(在这种情况下约为 14000)后,我收到一条错误消息,说我有一个连接超时错误:

/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)

我在网上搜索了很多,但我能得到的最好答案是我向服务器发出了太多请求。有没有办法通过节流或其他方法来解决这个问题?

4

1 回答 1

0

在更多的编程经验之后,我意识到这是我的一个简单错误:我的代码没有捕捉到抛出的错误,并在链接损坏时适当地移动到下一个链接。

对于遇到类似问题的任何 Ruby 新手程序员:

Connection timed out 错误通常是由于被废弃页面上的无效链接等。

您需要将访问链接的代码包装在如下语句中

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

例如,如果你有一个循环遍历链接并从每个链接中提取信息,那么它应该在 [1] 并且应该放置移动到下一个链接的代码(考虑使用类似 ruby​​ “next”的东西)在 [2]。您也可以考虑在控制台打印一些内容,让用户知道链接无效。

于 2012-08-30T19:59:12.253 回答