如何用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"}] 
  • 如何从URL下载文件并将其保存在Rails中?
  • 在Ruby中从string创build一个不区分大小写的正则expression式
  • 是否有可能在PHPStorm中获得Ruby语法突出显示?
  • Ruby on Rails:如何在Rails中明确定义复数名称和单数名称?
  • 原始与html_safe与h到unescape html
  • 如何在Rails3中使用unscoped关联关系?
  • Ruby的等效Python的“目录”?
  • ruby将数组转换为函数参数
  • 如何在rails中的命名空间中生成控制器
  • 如何“自我logging”可以编码而不恼人?
  • 未初始化的常量ActionDispatch :: Session :: EncryptedCookieStore(NameError)