Ruby "no implicit conversion of Hash into String (TypeError)" BOM付きファイルを読み込んだ時に起きるエラー
require 'open-uri' require 'nokogiri' UserAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36' File.open("scraping_hotels7.csv"){|f| f.each do |url| url.chomp! doc = Nokogiri::HTML(open(url,'User-Agent' => UserAgent)) puts doc sleep 1 end }
/Users/user_name/.rbenv/versions/2.1.4/lib/ruby/2.1.0/open-uri.rb:36:in `initialize': no implicit conversion of Hash into String (TypeError)
エラー内容を確認してみる。
文字列であるべきところにハッシュが入っているよーとのこと。
Nokogiriで解析するために集めたURLをリスト化したCSVを開いているが、ゴミがありそうな項目はない。 いろいろと調べていると、CSVを作成する際に文字化けせずにExcelでも開けるようにBOMを入れた事を思い出す。
Excel(エクセル)で文字化けしないUTF-8のCSVファイルを出力する方法
BOMが付いていない場合は、シフトJISと解釈して開いてしまうようで、そのため文字化けします。
BOMはfile コマンドを使って調べることができる。
$ file scraping_hotels7.csv scraping_hotels7.csv: UTF-8 Unicode (with BOM) text, with very long lines
BOMを除いたCSVを作成し、実行した所問題なく処理ができた。