0

長いループに次の行があります

page = Nokogiri::HTML(open(topic[:url].first)).xpath('//ul[@class = "pages"]//li').first

Ruby アプリケーションがクラッシュして、この行で「ファイルの終わりに達しました」という例外が発生することがあります。

この問題を解決するにはどうすればよいですか? begin;raise;end ブロックだけですか?

フォーラムのバックアップを実行するスクリプトなので、スレッドをスキップしないことが重要です。

前もって感謝します。

4

2 に答える 2

1

@Phrogz の優れたアドバイス (特にat_css単純な表現について) に加えて、生の xml [コンテンツ] を個別に取得します。

page = if (content = open(topic[:url].first)).strip.length > 0
  Nokogiri::HTML(content).xpath('//ul[@class = "pages"]//li').first
end
于 2012-07-25T17:32:27.703 に答える
0

このエラーが発生しないように、最初に根本的な問題を修正することをお勧めします。

  • 同じURLが常に問題を引き起こしますか?(ログファイルに出力します。)その場合は、URLをURIエンコードする必要があります。
  • それはランダムであり、したがって、接続の一時的な中断またはサーバーの問題に関連している可能性がありますか?その場合は、特定のエラーをレスキューしてretryから、重要なデータを取得するために1回以上実行する必要があります。

次に、そのクエリのCSS構文がはるかに単純であることを知っておく必要があります。

page = Nokogiri.HTML(...).at_css('ul.pages li')
  • これはバイトの半分未満であるだけでなく<ul class="foo pages">、XPathが見逃すような場合を考慮に入れています。
  • at_css(または)の使用at_xpathはと同じですが、.css(...).firstより高速で簡単です。
于 2012-07-25T17:18:35.050 に答える