2016-05-26 4 views
-1

URLに行き、 'li'要素を解析して配列に入れようとするこのコードはあります。しかし、私は 'b'タグではないものを解析しようとすると問題に遭遇しました。html要素を持たないNokogiri解析テーブル

コード:

url = '(some URL)' 
page = Nokogiri::HTML(open(url)) 
csv = CSV.open("/tmp/output.csv", 'w') 

page.search('//li[not(@id) and not(@class)]').each do |row| 
    arr = [] 
    row.search('b').each do |cell| 
    arr << cell.text 
    end 
    csv << arr 
    pp arr 
end 

HTML:私は終了

["The Company Name", "The Street", "The City", "The State", "The Zip Code"], 
["The Company Name", "The Street", "The City", "The State", "The Zip Code"], 
["The Company Name", "The Street", "The City", "The State", "The Zip Code"] 

答えて

0

<li><b>The Company Name</b><br> 
The Street<br> 
The City, 
The State 
The Zipcode<br><br> 
</li> 

出力はこのようなものになるように、私はすべての要素を解析したいと思います誰かが興味があれば私は簡単に変更しました

row.search('b').each do |cell| 

へ:

row.search('text()'.each do |cell| 

Iもに

arr << cell.text 

を変更された:すべての\ nとに存在していた\ rを除去するために

arr << cell.text.gsub("\n", '').gsub("\r", '') 

出力。私が好きなことをやるだろう、あなたのHTMLに基づいて

1
require 'nokogiri' 

def main 
    output = [] 
    page = File.open("parse.html") {|f| Nokogiri::HTML(f)} 
    page.search("//li[not(@id) and not (@class)]").each do |row| 
    arr = [] 
    result = row.text 
    result.each_line { |l| 
     if l.strip.length > 0 
     arr << l.strip 
     end 
    } 
    output << arr 
    end 
    print output 
end 

if __FILE__ == $PROGRAM_NAME 
    main() 
end 
+0

'[ "通り名"、 "市"、 "国家" のように見える1つの巨大な配列を返し、" 「その他の市町村名」、「その他の市区町村」、「その他の州」、「その他の郵便番号」] – Vladmrnv

+0

が正しいとします。コードを更新しました。 –

0

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<ol> 
<li><b>The Company Name</b><br> 
The Street<br> 
The City, 
The State 
The Zipcode<br><br> 
</li> 
<li><b>The Company Name</b><br> 
The Street<br> 
The City, 
The State 
The Zipcode<br><br> 
</li> 
</ol> 
EOT 

doc.search('li').map{ |li| 
    text = li.text.split("\n").map(&:strip) 
} 
# => [["The Company Name", 
#  "The Street", 
#  "The City,", 
#  "The State", 
#  "The Zipcode"], 
#  ["The Company Name", 
#  "The Street", 
#  "The City,", 
#  "The State", 
#  "The Zipcode"]] 
関連する問題