如何用NokogiriparsingHTML表格?

我安装了Ruby和机械化。 在我看来,在Nokogiri可以做我想做的事情,但我不知道该怎么做。

table呢? 它只是vBulletin论坛网站的HTML的一部分。 我试图保持HTML结构,但删除一些文本和标签属性。 我想要得到一些细节,如:标题,作者,date,时间,回复和视图。

请注意,HTML文档中有几个表? 我在它的tbody之后的一个特定的表格之后, <tbody id="threadbits_forum_251"> 。 名字将永远是相同的(我希望)。 我可以在代码中使用tbodyname吗?

 <table > <tbody> <tr> <!-- table header --> </tr> </tbody> <!-- show threads --> <tbody id="threadbits_forum_251"> <tr> <td></td> <td></td> <td> <div> <a href="showthread.php?t=230708" >Vb4 Gold Released</a> </div> <div> <span><a>Paul M</a></span> </div> </td> <td> 06 Jan 2010 <span class="time">23:35</span><br /> by <a href="member.php?find=lastposter&amp;t=230708">shane943</a> </div> </td> <td><a href="#">24</a></td> <td>1,320</td> </tr> </tbody> </table> 

One Solution collect form web for “如何用NokogiriparsingHTML表格?”

 #!/usr/bin/ruby1.8 require 'nokogiri' require 'pp' html = <<-EOS (The HTML from the question goes here) EOS doc = Nokogiri::HTML(html) rows = doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr') details = rows.collect do |row| detail = {} [ [:title, 'td[3]/div[1]/a/text()'], [:name, 'td[3]/div[2]/span/a/text()'], [:date, 'td[4]/text()'], [:time, 'td[4]/span/text()'], [:number, 'td[5]/a/text()'], [:views, 'td[6]/text()'], ].each do |name, xpath| detail[name] = row.at_xpath(xpath).to_s.strip end detail end pp details # => [{:time=>"23:35", # => :title=>"Vb4 Gold Released", # => :number=>"24", # => :date=>"06 Jan 2010", # => :views=>"1,320", # => :name=>"Paul M"}] 
  • Ruby 1.8和Ruby 1.9有什么区别?
  • 检查URL是否存在于Ruby中
  • 如何在Slim模板中的CoffeeScript引擎中访问实例variables
  • 当图像不存在时,如何在回形针中显示隐藏图像
  • Ruby:如何查找并返回数组中的重复值?
  • 在Ruby中,如何跳过.each循环中的循环,类似于“continue”
  • 为什么Ruby使用respond_to? 而不是responds_to?
  • 如何在rails中的命名空间中生成控制器
  • 为什么rake db:migrate:reset没有在rake -T中列出?
  • Rubystring类名称
  • testingstring是以另一个string开始还是结束