お役立ち情報

Rubyでopen uriを使ってWeb上のデータを取得しよう

RubyのOpen uri?

Rubyのopen uriはスクレイピングの一つです。スクレイピングとはWeb上のデータを取得して活用する技術になります。このページでは、スクレイピングの活かし方やopen uriの使い方について解説します。

スクレイピングとは

スクレイピングとは、Web上の情報を取得したりその情報を加工して使用する技術のことです。抽出する際はHTMLで取得するので、加工の際もHTMLを加工することになります。

特にリアルタイム更新でメリットがあり、たとえば天気の情報やニュース速報を取得し、自動で最新情報を提供することが可能です。

スクレイピングのライブラリ

スクレイピングをすべて自分で実装するのは大変なので、ライブラリを使用します。具体的にスクレイピングで使えるライブラリは以下の二つです。

  • open-uri
  • nokogiri(gem)

この二つのうちopen-uriは標準で入っているライブラリなので、特に何もしなくてもそのまま使用することができます。

open-uriの使い方

次に、実際のコマンドを踏まえつつopen-uriの使い方を解説していきます。open-uriを使用するためには、はじめにopen-uriを読み込みます。以下のコマンドで読み込むことができます。

require 'open-uri'

OpenURI.open_uriメソッドでWeb上の情報を取得します。

io = OpenURI.open_uri('http://www.sample.com')

これで指定したWeb上の情報を取得できました。この情報を読み込むメソッドがreadメソッドです。

puts io.read

上記のコードを実行すると、取得したWeb上の情報を読み込んで出力できます。

open-uriで取得した情報の扱い方

open-uriで取得した情報に対しては、複数のメソッドが使えます。

readメソッドで文字列にする

取得した情報をreadメソッドで文字列にするコードは以下です。

open('http://www.sample.com') { |io|
    puts io.read
}

出力結果は以下のようになります。

“<!doctype html>
<html>
省略
</html>”

charsetメソッドで文字コードを取得する

charsetメソッドは文字列ではなく文字コードを取得できます。サンプルコードは以下です。

open('http://www.sample.com') { |io|
    puts io.charset
}

出力結果は以下のようになります。

“iso-8859-1”

base_uriメソッドでURIを取得する

URI(Uniform Resource Identifier)とは、Web上の位置情報です。

厳密にはURL(Uniform Resource Locatorとは意味が異なりますが、基本的にはそこまで区別する必要はありません。URI、URLともう一つURN(Uniform Resource Name)というものがあるのですが、三つの関係は以下のようになります。

URI=URL+URN

つまり、URLはURIの一部ということです。

URLはWeb上のアクセスできる場所を示しますが、URNは単体ではアクセスできない位置情報を含みます。URLとURNを合わせるとURIになるので、URIはアクセスできる位置とアクセスできない位置の両方を含んでいるということです。

そのURI情報をbase_uriメソッドで取得することができます。サンプルコードは以下です。

open('http://www.sample.com') { |io|
    puts io.base_uri
}

出力結果は以下です。

“http://www.sample.com”

URI、この場合URLでもどちらでも良いのですが、Web上の位置情報を取得することができました。

content_encodingメソッドでヘッダの内容を取得する

URLを指定してヘッダの情報を取得することが可能です。サンプルコードは以下です。

open('http://www.sample.com') { |io|
    puts io.content_encoding
}

出力結果は以下です。

“”

空が返ってきました。ヘッダのないURIを指定するとこのように空が返ってきます。ヘッダがある場合、その内容が出力されます。

last_modifiedメソッドで最終更新時刻を取得する

last_modifiedメソッドは、指定したURIページの最新更新時刻を取得するためのメソッドです。サンプルコードは以下です。

open('http://www.sample.com') { |io|
    puts io.last_modified
}

出力結果は以下です。

“2019-01-14 42:54:35 UTC”

●metaメソッドでヘッダ情報をハッシュで取得する

open('http://www.sample.com') { |io|
    p io.meta
}

これでハッシュを取得することができます。ハッシュとは、データに対して適当に作られた値のことです。実際は内部で何かしらの計算が行われていますが、人間の目から見れば適当な値に見えます。ハッシュの目的は暗号化なので、意味のあるデータではありません。

nokogiriライブラリでも同じようなことが可能

標準搭載されているopen-uriを使用しても良いのですが、nokogiriをインストールして使っても良いです。わざわざnokogiriをインストールしてまで使うメリットですが、open-uriよりも大規模データを一気に解析する際に見やすいという声もあります。

とはいえそこまで頻繁に使用するわけでないのなら、open-uriで十分かとは思います。nokogiriのインストールは簡単で、以下のコマンドです。

gem install nokogiri

これでnokogiriをインストールしたので、open-uri同様に使えます。

スクレイピングの問題点

スクレイピングは自分や他人のサイト情報を取得するのに便利ですが、著作権上の問題があります。たとえば勝手にニュースサイトの情報を抜き出して配信したり、天気情報を抜き出してサイトに掲載すると著作権侵害になります。

個人利用ならグレーゾーンで、なおかつ訴えられるようなこともないでしょう。しかし、他人のサイトから情報を抜き出して商用利用すれば訴えられる可能性があり、またそうでなくてもGoogleからサイトがペナルティを受ける可能性が高いです。

スクレイピングはデメリットも理解したうえで安全に利用する必要があります。またスクレイピングはサーバに負荷が掛かる処理だということも把握しておいた方が良いでしょう。なぜなら、サーバから情報を取得する際に大量のリクエストを送るからです。

あまりないことですが、意図的にスクレイピングで大量データを送り、サーバを落とすような事例もあります。自分が加害者でも被害者でも問題なので、一応知っておいた方が良い情報かと思います。

ちなみに、スクレイピングを悪用するとDos攻撃やWebハッキングに該当します。きちんとデメリットを理解したうえで利用すれば、スクレイピングは他人や自分のサイトを分析するにも便利な技術です。

Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
13, Rubyでディレクトリ内のファイルを一覧出来るようにする方法
14, Rubyを使ってcsvファイルを読み込む・書き込む方法まとめ
15, MacでRubyの開発環境構築する方法をまとめました
16, サーバーサイド開発言語としてのRubyってどうなの?
17, Rubyで範囲オブジェクトを配列にする方法
18, CentOSサーバにRubyをインストールする方法
19, Rubyを使ってやりたいことから逆引きで使える機能を解説します
20, (この記事)Rubyでopen uriを使ってWeb上のデータを取得しよう
21, Rubyでハッシュをマージ(結合)する方法まとめ
22, Rubyのrakeの使い方をまとめました
23, Rubyでのtimeクラスの取扱に関してのまとめ

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ