rubyのNokogiriを使用してスクレイピングをしています。
テキスト取得した際にコードポイントになってしまうようでしたので変換処理(decode_unicode)をかけたのですがうまくいかない様子です。
ruby
1def decode_unicode(str) 2 str.gsub(/\u([\da-fA-F]{4})/){ [$1].pack('H*').unpack('n*').pack('U*') } 3end 4 5url = "" 6doc = Nokogiri::HTML(open(url), nil, "utf-8") 7result = doc.css("") 8 .map { |ele| decode_unicode(ele.inner_text)}
確認したところdecode_unicodeでコードポイントが正規表現にマッチしていない様子でしたが下記のようなシングルクオーテーション文字列ではマッチして変換されるようでした。
ruby
1def decode_unicode(str) 2 str.gsub(/\u([\da-fA-F]{4})/){ [$1].pack('H*').unpack('n*').pack('U*') } 3end 4 5uni = '\u3053\u3093\u306B\u3061\u306F' 6 7p decode_unicode(uni)
nokogiriでの文字コードをshift_jis指定など試してみましたが
うまくいかずどなたかご教授よろしくお願いいたします。
テキスト取得した際にコードポイントになってしまうよう
と確認した部分を下記に追記いたしました。
ruby
1url = "https://tabelog.com/tokyo/A1308/A130801/13098267/" 2doc = Nokogiri::HTML(open(url), nil, "utf-8") 3p doc.css("table.c-table.c-table--form.rstinfo-table__table") 4 .css("td") 5 .map { |ele| ele.inner_text }[0] 6 7#出力結果 8# "\n \n \u3048\u3093\n \n \n "
回答1件
あなたの回答
tips
プレビュー