Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyでスクライピングの処理を作るなら、Rubyの標準ライブラリの1つのopen-uriを利用し、openメソッドを利用します。ただし、HTMLには文字コードの違いによる文字化けが発生するなどの注意が必要なケースもあるので、正しい使い方が必要です。今回はopen-uriの機能とその使い方について解説します。

Rubyでスクライピングするには

自動的に外部のWebサイトにアクセスし、そのサイトから取得したデータを利用する技術をスクライピングと言います。このスクライピングをRubyで実現するには、外部のWebサイトにアクセスするためのライブラリを利用しなければなりません。

Rubyで外部のWebサイトにアクセスするためのライブラリとして標準で付属しているのがopen-urlです。open-urlについて解説する前に、スクライピングの基本について解説します。

スクライピングとは

今回取り上げるスクライピングとはWeb scrapingのことで、プログラムを使って外部のWebサイトにアクセスし、そのサイトから取得したHTMLを解析し、記載されている情報を利用する方法です。

例えば検索エンジンは、自動的にWebサイトにアクセスしてキーワードを抽出することで、利用者が検索したキーワードに合致するページを紹介しますが、これもスクライピングの一種です。

また他のサイトの情報を自社のWebサイトで活用するケースの他、自社のWebサイトを自動的にチェックするためのプログラムなどにも応用できます。

Rubyで外部サイトにアクセスするのは面倒

Rubyでファイルを読み込むには、IO.openメソッドを利用します。ファイルシステムにアクセスするためのIOクラスは標準で組み込まれているので、特別なライブラリを読み込むことから利用できます。

Rubyでスクライピングの処理を作るならネットワークにアクセスする機能を使い、外部のWebサイトにアクセスする機能を利用します。しかしこの機能はRubyの標準として組み込まれてはいません。そのため外部のライブラリを利用します。

RubyでWebサイトを開くには

Rubyにはネットワークを利用するための基本的な機能が組み込まれており、それを使ってHTMLを取得することが可能ですが、使い易いとは言えません。そこでファイルにアクセスするopenメソッドと同じように使える機能がopen-uriライブラリとして用意されています。

インターネットでRubyによるスクライピングを検索すると、nokogiriというgemライブラリとopen-uriライブラリがヒットします。このnokogiriというgemライブラリは、Webサイトにアクセスする処理にopen-uriライブラリをそのまま利用しています。

Rubyでスクライピング用のプログラムを作るには、open-urlライブラリの使い方を学んでください。

open-uriライブラリの使い方

open-uriライブラリは、Rubyでhttpプロトコル、またはftpプロトコルで外部のWebサイトにアクセスし、まるでファイルを読み込むようにHTMLを読み込む機能を提供します。

使い方はファイルにアクセスするopenと似ていますが、全く同じではありません。次からopen-urlライブラリとそれに含まれているURI.openメソッドの使い方を紹介します。

ライブラリ読み込み

open-uriライブラリの機能を利用するには、このライブラリを読み込まなければなりません。ソースファイルの中でrequireメソッドによりopen-uriライブラリを読み込んでください。

open-uriライブラリの読み込み方法

require 'open-uri'

ファイルのように取り込む

open-uriライブラリを利用して外部のWebサイトを取り込むには、URI.openメソッドを使います。最初の引数は参照したいWebサイトのURIで、さらに必要に応じてオプションの指定が指定です。

またURI.openメソッドで取り込んだHTMLは、URI.openメソッドに続けて記述するブロックでファイルと同じように扱えます。

URI.openメソッドの文法(ブロックを使う方法)

open(外部のWebサイトのURL) { |f|
処理
}

URI.openメソッドを使った例(ブロックを使う方法)

require 'open-uri'
url = 'https://example.com'
URI.open(url) { |f|
 f.each_line(|line| p line }
}

この例ではURI.openでurlから取得したHTMLを、ブロック内の変数fに格納し、さらにeach_lineで1行ずつ変数lineに入れてそれを表示しています。

文字列として取り込む

先ほどブロックを利用して指定したWebサイトのHTMLを処理する方法を紹介しましたが、文字列として取り込み、それを処理することも可能です。

URI.openメソッドの文法(文字列として取り込む方法)

文字列変数 = URI.open(外部のWebサイトのURL)

URI.openメソッドを使った例(文字列として取り込む方法)

require 'open-uri'
url = 'http://example.com/'
file = URI.open(url)
puts file.read

この例ではURI.openでurlから取得したHTMLを、文字列のオブジェクトfileに取り込み、readメソッドでその内容を表示します。

メタ情報にアクセスする

今回紹介しているURI.openメソッドを利用すると、指定したURLから取得したHTMLの他に、その属性やメタ情報なども取り出せます。なお属性に含まれる情報は、文字コードやヘッダに含まれる文字列です。

次からURI.openメソッドを利用してメタ情報を参照する方法を紹介します。

文字コードを取得する

Webページの表示に使われるHTMLは、パソコンのテキストエディタでも作成できます。もしWindows標準のメモ帳でHTMLを作成した場合、文字コードにUTF-8が使われているのをご存じでしょうか。他にもSJISやEUCなどの文字コードも使用可能です。

Rubyでは、プログラム内で使用する文字コードが設定されており、その文字コードと一致しないHTMLを読み込んでしまうと、文字化けにより誤動作することがあります。そのためHTMLを処理する前に文字コードをチェックし、必要なら文字コードを変換します。

URI.openメソッドでWebサイトを読み込んだ場合、そのメタ情報として文字コードの参照が可能です。次の例のように「charset」を指定して参照してください。

文字コードの参照方法

require 'open-uri'
url = 'https://example.com'
URI.open(url) { |f|
 p f.charset # 文字コードが表示される
}

content_typeを取得する

WebブラウザからWebサーバーにアクセスした場合、HTMLの送信される訳ではありません。通信データに埋め込まれるデータもあります。その1つがcontent_typeです。content_typeによって受け取ったデータがHTMLか画像かを判定します。

URI.openメソッドでHTMLを取得した際、メタ情報としてcontent_typeを参照可能です。次の例のように「content_type」を指定して参照してください。

content_typeの参照方法

require 'open-uri'
url = 'https://example.com'
URI.open(url) { |f|
 p f.content_type
}

metaタグの情報

最近のよく参照されるWebサイトのHTMLには、Googleなどの検索エンジンに評価してもらうための情報をmetaタグの中に記述しています。URI.openメソッドを利用すれば、このmetaタグに記述された情報をハッシュとして取り出すことが可能です。

meta情報をハッシュとして取り出すには下の例のように「meta」メソッドを使います。

metaタグの情報を取り出す例

require 'open-uri'
url = 'https://example.com'
URI.open(url) { |f|
 p f.meta
}

まとめ

これまで解説したようにopen-uriライブラリを利用することで、外部のWebサーバーからHTMLを読み込む処理を作ることが可能です。そしてこの機能はRubyを利用したスクライピングやWebサイトに対する接続テストなどに利用できます。

ただしスクライピングで他社のサイトの情報を勝手に利用すると著作権の問題や相手のサービスを妨害する行為とみなされるなど、いろいろな問題が発生します。そのようなリスクがあることを理解したうえでopen-uriライブラリを利用してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。