Rubyのopen-uriライブラリを使ってあるサイトのHTMLを取得したが表示がおかしくなる問題
Rubyのopen-uriというライブラリを使って「Google検索で、"Ruby"と検索して出てきた10件のリンク」を取得して表示する簡単なスクレイピングに挑戦しています。
取得したHTML文の表示がおかしいので何が悪いのかを知りたいです。
目標としては以下の画像の様にリンクのHTML文が出るようにしたいです。
環境
AWS cloud9
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
さぁ作ろうと思い、以下のようなコードを書いてみました。
require 'open-uri'
#URLからHTMLを取得
url = 'https://www.google.co.jp/search?q=ruby'
user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
charset = nil
html = open(url, "User-Agent" => user_agent) do |f|
charset = f.charset
f.read
end
#取得したHTMLを出力
puts html
ですが、ターミナルに出力されたHTML文が全く改行されてない上、CSSやJavaScriptのコードらしきものも紛れていて非常に見辛いです。それに、探しても10件のリンクだと分かるような要素が見つかりません
<a href="~~">オブジェクト指向スクリプト言語 Ruby</a>
みたいな文です。
ターミナルの上の方にもまだまだ文字がありますが、や
などHTMLらしいタグはなくfunctionなどJavaScriptのコードなのかよくわからないものが未改行で続いています。
試したこと
ターミナルだけだと取得した文字列を全て表示できないのかな?と思い、取得したHTML文をRubyのFileクラスを用いてテキストファイルにして全て目を通してみました。
File.open("test.html", "w") do |str|
str.puts(html)
end
を追加。
全て目を通しましたが、日本語すら出てこず、相変わらず未改行で、CSSやJavaScript文がゴチャ混ぜになっています。
テキストファイル内の画像
そこで、試しにこのHTML文をブラウザで表示させてみた所、日本語版のGoogleではなく何故か英語版のGoogleになっていました。
とはいえ、
url = 'https://www.google.co.jp/search?q=ruby'
のコードのURL部分に"google.co.jp"が含まれているはずなので日本語が表示されないとおかしいはずなのです。
もしかして僕のGoogleアカウントの言語設定が英語になってたりするのかなと思い見てみましたがしっかり"日本語"を使用するようになってました。
もう何がなんだかわかりません...。はじめての質問ですが、Stackoverflow公式の「良い質問をするには?」を参考に書いたつもりです。ですが、分かりにくい文章だと思います。申し訳ありません。