任何想法我怎么能得到下面的代码来产生这个输出?
1 -
2 - B
我收到这个错误“未定义的方法`文本'为nil:NilClass(NoMethodError)”,因为我认为表1中没有元素'td class = r2'。
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML.parse(<<-eohtml)
<table class="t1">
<tbody>
<tr>
<td class="r1">1</td>
</tr>
</tbody>
</table>
<table class="t2">
<tbody>
<tr>
<td class="r1">2</td>
<td class="r2">B</td>
</tr>
</tbody>
</table>
eohtml
doc.css('tbody > tr').each do |n|
r1 = n.at_css(".r1").text
r2 = n.at_css(".r2").text
puts "#{r1} - #{r2}"
end
答案 0 :(得分:1)
如果只有两个表,那么您可以执行以下操作:
t1_r1 = doc.xpath('//table[@class="t1"]//td[@class="r1"]').text
t1_r2 = doc.xpath('//table[@class="t1"]//td[@class="r2"]').text
t2_r1 = doc.xpath('//table[@class="t2"]//td[@class="r1"]').text
t2_r2 = doc.xpath('//table[@class="t2"]//td[@class="r2"]').text
让我们测试一下结果。
>> "#{t1_r1} - #{t1_r2}"
=> "1 - "
>> "#{t2_r1} - #{t2_r2}"
=> "2 - B"
答案 1 :(得分:0)
在您确认自己有元素之前,请不要调用text()方法。您可以将通话r1 = n.at_css(".r1").text
分成两行,或使用|| (ruby null coalescing idiom)在at_css()方法返回nil时将r1设置为默认值。