.at_css('.businesscategory label')
возвращает только первый соответствующий узел. Используйте .css('.businesscategory label')
, чтобы получить все подходящие узлы
это xml
xml = <<-XML
<tbody>
<tr class="alt2">
<td class="company">ABB Shanghai Transformer Co., Ltd.</td>
<td class="contactperson">Mr. Frank Liang<br/></td>
<td class="businesscategory">
<label><code>C27.11 </code>Manufacture of electric motors, generators and transformers</label>
<label><code>C27.33 </code>Manufacture of wiring devices</label>
</td>
</tr>
</tbody>
XML
и этот скрипт
require 'rubygems'
require 'nokogiri'
require 'pp'
doc = Nokogiri::HTML.fragment(xml)
puts "with at_css example:"
doc.css("tbody tr").each do |company|
company.at_css(".businesscategory label").each do |category|
puts category.at_css("code").text
puts category.text
end
end
puts "\n\nwith css"
doc.css("tbody tr").each do |company|
company.css(".businesscategory label").each do |category|
puts category.at_css("code").text
puts category.text
end
end
печатает этот результат
with at_css example:
with css
C27.11
C27.11 Manufacture of electric motors, generators and transformers
C27.33
C27.33 Manufacture of wiring devices
Итак, как видите, использование .css
вместо .at_css
решит вашу проблему.
Использование .at_css('.businesscategory').children
приведет к появлению пробельных узлов, поэтому будьте осторожны
puts "\n\nwith at_css().children"
doc.css("tbody tr").each do |company|
company.at_css(".businesscategory").children.each do |category|
puts category.text.inspect
end
end
печать
with at_css().children
"\n "
"C27.11 Manufacture of electric motors, generators and transformers"
"\n "
"C27.33 Manufacture of wiring devices"
"\n "