ruby - 野科切 ruby : Iterate over table rows with no class name

标签 ruby nokogiri

我想迭代表的每一行。 这是相关源代码,总共显示 6 个表行。 其中 3 个没有类名,另外 3 个有,... 代表一些属性。

<tbody>

    <tr> … </tr>
    <tr class="even"> … </tr>
    <tr> … </tr>
    <tr class="even"> … </tr>
    <tr> … </tr>
    <tr class="even"> … </tr>

</tbody>

假设 doc 是 Nokogiri::HTML::Document,以下代码仅生成 3 个 tr 元素,而不是 6 个。它仅返回具有 class="even"的 tr 元素。

doc.css('#main_result table tbody tr').each do |tr|
  p tr
end

我现在如何获取所有 tr 元素的数组,使其能够迭代它们?

这个实际的 HTML 可以在以下链接中找到: http://www.motogp.com/en/Results+Statistics/1949/TT/500cc/RAC

我真的不知道如何很好地粘贴源代码...抱歉

最佳答案

该页面中的 HTML 格式错误,并且缺少一些 <tr>标签,它实际上看起来像这样:

<tbody>
    <td></td>
    ...
  </tr>
  <tr class="even">
    <td></td>
    ...
  </tr>
    <td></td>
    ...
  </tr>
  <tr class="even">
    <td></td>
    ...
  </tr>
    <td></td>
    ...
  </tr>
  <tr class="even">
    <td></td>
    ...
  </tr>
</tbody>

请注意,只有tr标签为 class="even"都在场,其他人失踪了。因此,Nokogiri 在解析页面时只看到三行。

一种可能的解决方案是使用 Nokogumbo ,它将 Google 的 Gumbo HTML5 解析器添加到 Nokogiri,并更好地处理和纠正格式错误的 HTML,如下所示:

require 'nokogumbo' # install the gem first

doc = Nokogiri.HTML5(the_page)

puts doc.css('#main_result table tbody tr').size
# should now be 6 rather than 3

关于ruby - 野科切 ruby : Iterate over table rows with no class name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049277/

相关文章:

ruby-on-rails - Devise 2.1默认是关闭盐的吗?

ruby - 警告——DICOM : Decompressing pixel values has failed

ruby - Heroku 应用程序崩溃并显示 'libruby.so.1.9: cannot open shared object file'

ruby-on-rails - 使用 Nokogiri 解析 XML

ruby - HTTParty 和 text/xml

ruby - 为什么 UDPSocket.send 在 Ruby 中总是调用 getaddrinfo?

ruby-on-rails - Rails 将多个表导出到 csv

ruby - 通过 Nokogiri 获取可见的文本词

xml - 如何获取节点的水平深度?

ruby-on-rails - 在 Rails 中安排和执行重复性任务(如抓取信息页面)的最佳方式是什么?