用rails和nokogiri解析html



我需要使用Rails和Nokogiri解析HTML。下面是HTML:

<body>
  <div id="mama">
    <div class="test1">text</div>
    <div class="test2">text2</div>
  </div>
  <div id="mama">
    <div class="test1">text</div>
    <div class="test2">text2</div>
  </div>
  <div id="mama">
    <div class="test1">text</div>
    <div class="test2">text2</div>
  </div>
</body>

我应该如何形成循环问题?我已经尝试了很多次,但仍然得到一个错误或不好的结果……

doc.xpath('//div[@id='mama']/?or what?').each do |node|
  parse_file.puts text1 
  parse_file.puts text2
  parse_file.puts text1 
  parse_file.puts n
end

结果应该像

text from first mama
text2 from first mama
text from first mama
text from second mama
and so on...

首先,注意您发布的HTML在语法上是无效的:拥有多个具有相同id属性值的元素是非法的。如果你可以控制你的HTML,你应该解决这个问题。

然而,使用相同的(无效的)HTML, Nokogiri仍然没有问题:

require 'nokogiri'
doc = Nokogiri::HTML(my_html)
doc.css('#mama').each_with_index do |div,i|
  puts "#{div.at_css('.test1').text} from mama ##{i}"
  puts "#{div.at_css('.test2').text} from mama ##{i}"
end
#=> text from mama #0
#=> text2 from mama #0
#=> text from mama #1
#=> text2 from mama #1
#=> text from mama #2
#=> text2 from mama #2

如果您想直接使用XPath(就像Nokogiri在幕后为CSS所做的那样),您可以这样做:

doc.xpath("//div[@id='mama']").each_with_index do |div,i|
  puts "#{div.at_xpath("./*[@class='test1']").text} from mama ##{i}"
  puts "#{div.at_xpath("./*[@class='test2']").text} from mama ##{i}"
end

首先,您的撇号/引号是关闭的。

doc.xpath('//div[@id="mama"]/?or what?')

相关内容

  • 没有找到相关文章

最新更新