Nokogiri和桌子

时间:2014-07-29 12:37:46

标签: ruby parsing nokogiri

使用标准结构解析网页如下:

<html>
  <body>
     <table>
        <tbody>
           <tr class="active">
             <td>name1</td>
             <td>name2</td>
             <td>name3</td>
          </tr>
       </tbody>
     </table>
  </body>
</html>

对于我的生活,我无法访问'tbody'或'tr'元素。

response = open('http://my_url')
node = Nokogiri::HTML(response).css('table')
puts node

返回

#<Nokogiri::XML::Element:0x8294c08c name="table" attributes=[#<Nokogiri::XML::Attr:0x8294c014 name="id" value="beta-users">] children=[#<Nokogiri::XML::Text:0x82953bc0 "\n">]>

我尝试了各种技巧,但似乎无法深入挖掘到比“桌子”更低级别的孩子。

充其量,我可以使用

到达最低级别的Text对象
node.children

但是

node.children.text 

返回“\ n”。

尽管搜索了几个小时,但没有人知道如何解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的样本中有一个非封闭的类值,它应该是:

<html>
  <body>
     <table>
        <tbody>
           <tr class="active">
             <td>name1</td>
             <td>name2</td>
             <td>name3</td>
          </tr>
       </tbody>
     </table>
  </body>
</html>

更正后,您可以:

node = Nokogiri::HTML(response).css('table tbody tr td')
node.each {|child| puts child.text}
name1
name2
name3