0

我在一个长循环中有以下行

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

有时,我的 Ruby 应用程序崩溃,并在这一行中引发“到达文件末尾”异常。

我该如何解决这个问题?只是一个开始;提高;结束块?

是一个执行论坛备份的脚本,所以不跳过任何线程很重要。

提前致谢。

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一次或多次以获取关键数据。

其次,您应该知道该查询的 CSS 语法要简单得多:

page = Nokogiri.HTML(...).at_css('ul.pages li')
  • 这不仅少于字节的一半,而且还允许<ul class="foo pages">出现 XPath 丢失的情况。
  • 使用at_css(or at_xpath) 与 相同.css(...).first,但更快更简单。
于 2012-07-25T17:18:35.050 回答