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プログラマーの場合:

接続タイムアウトエラーは通常、ページ上の無効なリンクなどが廃棄されていることが原因です。

リンクにアクセスしているコードを次のようなステートメントでラップする必要があります

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]にあり、次のリンクに移動するコード(ruby "next"などを使用することを検討してください)を配置する必要があります。 [2]で。また、リンクが無効であることをユーザーに知らせるために、コンソールに何かを印刷することを検討することもできます。

于 2012-08-30T19:59:12.253 に答える