我想迭代表的每一行。 这是相关源代码,总共显示 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/