スクレイピングしたhtmlファイルデータのcsv化についてご相談します。
htmlファイルからNokogriで解析したデータのcsvファイルへの書込みがうまくいきません。
htmlファイルの中の表データから4種類のデータを取得をし、csvに書き込みましたが、
4つ目のhref属性のデータの位置がずれてしまします。
例えば、下記のような表から4項目のデータを取得しcsvファイルに書き込むと、
列a | 列b | 列c | 列d |
---|---|---|---|
製造年 | 産地 | 価格 | 写真リンク |
2016 | tokyo | リンク1 | |
2013 | chiba | 2500 | |
2015 | osaka | リンク2 | |
2016 | kyoto | 2100 | |
2016 | kobe | 2200 | リンク3 |
d列だけ、データが空の場合いは、下記のように上に詰めて書込みされてしまいます。
2016,tokyo, ,リンク1,
2013,chiba,2500,リンク2,
2015,osaka, ,リンク3,
2016,kyoto,2100,,
2016,kobe,2200,,
これをエクセルで読込むと、下記に様に、表示位置が変わってしまいます。
列a | 列b | 列c | 列d |
---|---|---|---|
製造年 | 産地 | 価格 | 写真リンク |
2016 | tokyo | リンク1 | |
2013 | chiba | 2500 | リンク2 |
2015 | osaka | リンク3 | |
2016 | kyoto | 2100 | |
2016 | kobe | 2200 |
プログラムは下記の通りです。
※上記の表は例えです。実際プログラムの中のxpathとは相違します。
何卒、ご指導のほど宜しくお願いいたします。
ruby
1# coding:utf-8 2require 'nokogiri' 3require 'csv' 4 5 6files=Dir.glob('/Users/PCUser/work/files/*.html') 7files.each do |file| 8doc = Nokogiri::HTML(open(file),nil,'utf-8') 9 10ay=[] 11by=[] 12cy=[] 13dy=[] 14 15 16a=doc.xpath ('//div[2]/center/table/tbody/tr/td[1]/font/table/tbody/tr/td[1]/font') 17b=doc.xpath ('//div[2]/center/table/tbody/tr/td[1]/font/table/tbody/tr/td[2]/nobr/font') 18c=doc.xpath ('//div[2]/center/table/tbody/tr/td[2]') 19d=doc.xpath ('//div[2]/center/table/tbody/tr/td[9]/font/a') 20 21a.each do |node| 22ay << node.text 23end 24 25b.each do |node| 26by << node.text 27end 28 29c.each do |node| 30cy << node.text 31end 32 33d.each do |node| 34dy << node[:href] 35end 36 37CSV.open('bo.csv','a') do |csv| 38a.length.times do |z| 39csv << [ay[z],by[z],cy[z],dy[z]] 40 41end 42end 43end
【試したこと】
d.each do |node| dy << node[:href] end の部分を条件分岐で配列の書き込みをしましたが、同じ結果でした。 iy=[] i.each do |node| if i.empty? iy <<'empty' elsif i.nil? iy << 'nil' else iy << node[:href] end end
補足情報(言語/FW/ツール等のバージョンなど)
Ruby 2.2.4-p230
caypybara 2.7.0
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。