2016-09-23 3 views
0

htmlテーブルを解析すると、テーブルの最初の行をNokogiri要素として取得できます。Nokogiri要素の子にアクセスする

2.2.1 :041 > pp content[1]; nil 
#(Element:0x3feee917d1e0 { 
    name = "tr", 
    children = [ 
    #(Element:0x3feee917cfd8 { 
     name = "td", 
     attributes = [ 
     #(Attr:0x3feee917cf74 { name = "valign", value = "top" })], 
     children = [ 
     #(Element:0x3feee917ca60 { 
      name = "a", 
      attributes = [ 
      #(Attr:0x3feee917c9fc { 
       name = "href", 
       value = "/cgi-bin/own-disp?action=getowner&CIK=0001513362" 
       })], 
      children = [ #(Text "Maestri Luca")] 
      })] 
     }), 
    #(Text "\n"), 
    #(Element:0x3feee917c150 { 
     name = "td", 
     children = [ 
     #(Element:0x3feee917d794 { 
      name = "a", 
      attributes = [ 
      #(Attr:0x3feee9179fb8 { 
       name = "href", 
       value = "/cgi-bin/browse-edgar?action=getcompany&CIK=0001513362" 
       })], 
      children = [ #(Text "0001513362")] 
      })] 
     }), 
    #(Text "\n"), 
    #(Element:0x3feee91796a8 { 
     name = "td", 
     children = [ #(Text "2016-09-04")] 
     }), 
    #(Text "\n"), 
    #(Element:0x3feee9179194 { 
     name = "td", 
     children = [ #(Text "officer: Senior Vice President, CFO")] 
     }), 
    #(Text "\n")] 
    }) 
=> nil 

これは、行からのコンテンツです:

マエストリルカ0001513362 2016年9月4日役員:上級副社長、CFO

私は名前、番号、日付にアクセスする必要がありますNokogiri要素からのタイトル。それをやっての

一つの方法は以下の通りである:しかし

2.2.1 :042 > pp content[1].text; nil 
"Maestri Luca\n0001513362\n2016-09-04\nofficer: Senior Vice President, CFO\n" 

、私はいない改行文字で一つの長い刺すよう、個別の要素にアクセスする方法を探しています。どうしたらいいですか?

答えて

1
name, number, date, title = *content[1].css('td').map(&:text) 

content[1]trであれば、content[1].css('td')は我々*とスプラットよりも、私たちは複数の割り当てを行うことができ、.map(&:text)はそれらtdのそれぞれについてtd.textを呼び出して、配列に入れます、その下のすべてのtdの要素を、見つけます。

(次回は、Nokogiriノードの検査結果ではなく元のHTMLフラグメントを含めてください)

関連する問題