前提・実現したいこと
初めまして。Rubyを学び始めて数日が経過した程度が私のレベルです。
非常に初歩的な質問をしてしまうと思いますがご容赦ください。
今回、Webからスクレイピングをしようと思って試行錯誤しています。
Nokogiriを使用してコードを書き、情報自体は取得できたのですが問題がありました。
csv出力をしようと思い、出力方法を色々検索して試してみたのですが、どうしても列方向に
並べることができません。
内容としては取得した情報からタグを除いて(.content)列方向に並べたいのです。
更にいくつかの疑問があります。
1.以下のコードではタグ部分のみしかcsvに出力されませんでした。なぜなのでしょう?
これは後に記載の全文から抜粋して書き換えています。
doc.css('span.much-title').each do |s|
csv.puts s
end
想定ではputsでテスト表示した文がそのまま表示されるはずでした。
しかし、実際は本文の前のタグのみだけが出力されてしまいます。
2.文字化けが直せません。
csvで出力すると文字化けします。
doc = Nokogiri::HTML(html,nil,charset)
の部分を utf-8 や nil に書き換えてもだめでした。
以上の点をお答えいただければ幸いです。よろしくお願いいたします。
発生している問題・エラーメッセージ
エラーメッセージ undefined method `map' for #<String:0x0000000003a30770> (NoMethodError)
該当のソースコード
全文を記載します。相違部分はアドレスとクラス名のみです。
require 'open-uri' require 'nokogiri' require 'csv' url = 'https://XXX/' charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML(html,nil,charset) csv = CSV.open('result.csv', 'w') best = [] doc.css('span.much-title').each do |s| best.push(s.text) end puts best CSV.open('result.csv', 'w') do |sss| best.each do |ss| sss << ss end end
試したこと
bestを二重配列にしてみたり、ネットで調べたコードを順に試しましたが望む結果には至りませんでした。
必要な情報自体は取得できています。
追加情報が必要でしたら追記いたします。
補足情報(FW/ツールのバージョンなど)
Atomで動作テストをしています。
あなたの回答
tips
プレビュー