クローラーをRubyで作れることをご存じでしょうか。クローラーと言えば、Googleの検索結果で上位に表示される仕組みに使われているが有名です。さらに他にも自動でWebサイトの更新情報をチェックして回る多くのクローラーが稼働しています。
インターネット上の情報をビジネスで活用するならクローラーが便利です。Rubyでクローラーを実現してビジネスに活用しましょう。今回は、Rubyでクローラーを作る方法について紹介します。
Rubyでもクローラーが作れる?
インターネットに公開されているWebサイトから自動的に最新情報を収集するために、多くのクローラーが動いています。そのようなクローラーをRubyで開発することは可能です。
まずはクローラーの仕組みとRubyで作る際の課題について解説します。
クローラーとは
そもそもクローラーとは、Wbサイトを巡回してそのサイトに記載された情報を取得するプログラムのことです。自動的に動作することから、ロボットやボットと呼ばれます。また、URLの繋がりをクモの巣に例え、そこを動き回ることからスパイダーと呼ばれることもあります。
なおクローラーで有名なものがGoogleのボットで、自動的にWebサイトに記載された内容を解析し、Googleによる検索で使われるデータベースに追加していきます。そのためGoogleのボット対策はWebに関わるエンジニアなら常識と言えるでしょう。
Webサイトの内容を自動で取得する
インターネットから情報を集めようとしたら、普通は検索サイトでURLを調べて、WebブラウザにそのURLを指定することで、その情報の記載されたWebサイトを表示します。また、もしURLを既に知っているのなら、Webブラウザに直接URLを指定し、そのWebサイトを開いて調べることも可能です。
そしてWebブラウザと同じ機能をプログラミング言語で作ることが可能です。なおそのためには開発に用いるプログラミング言語用に合わせて公開された、Webブラウザと同じ機能のライブラリを組み合わせます。
Rubyでクローラーを作ることは可能?
Webブラウザと同じような機能なら、Ruby用のライブラリも公開されています。そして、そのようなライブラリとRuby on Railsを組み合わせることで、クローラーを自作することは可能です。
もし特定の情報を扱うWebサイトを巡って、そのWebサイトに記載されている内容を解析し、そこに新しい情報があればデータベースを更新し、そうやって収集した情報を表示する仕組みを検討してください。次からRubyを利用して簡単なクローラーを作る方法を紹介します。
クローラーを作るには
先ほどRubyでもクローラーを作れると紹介しましたが、そのためには、スクライピング用のライブラリ、更新情報を格納するデータベース、そして収集した情報を表示するためのWebシステムが必要です。
次からプログラミング言語を使ってクローラーを作るために必要なこれらの機能について紹介します。
スクライピング用のライブラリを使う
クローラーを作るために必須の機能が、スクライピング用の機能です。このスクライピングとは、Webブラウザと同じように指定されたURLからHTMLをダウンロードし、プログラムでそれを解析できるようしてくれます。
なおWebブラウザではテキストの他に画像や動画など、いろいろなコンテンツを表示しますが、クローラーにはそのような機能は必要ありません。ただし、WebサイトのHTMLで書かれた構成を解析し、目的のデータを取り出すための機能が必要です。
Rubyでは指定されたURLかHTMLを取得し、そのHTMLのタグの情報を解析することで、目的のデータを簡単に取り出せるスクライピング用ライブラリが公開されているので、これを利用します。
データベースへのアクセス
クローラーには、指定されたWebサイトで情報が更新されているかをチェックし、もし更新があったらそれを保存するための仕組みも必要です。そして保存先としてデータベースを使うのが一般的です。プログラムからデータベースにアクセスする機能を利用してください。
Rubyにはデータベースにアクセスする機能が用意されており、さらにRuby on Railsを利用することでデータベースを簡単に利用できます。
クローラーの実行状況をチェックする
毎日クローラーがWebサイトをチェックし、取得したデータがデータベースに保存されているのなら、それを表示する仕組みも必要です。
なおクローラーは、指定した時刻に自動でWebサイトをチェックすることから、24時間対応の保守が受けられるクラウド上のサーバーに設置するのが一般的です。そしてクローラーが取得したデータを表示するWebシステムも、同じようにクラウド上に構築します。
AWSなどのクラウドサービスでは、クラウド内で使えるデータベース機能を提供しています。このような仕組みを使うことで、クローラーとクローラーが集めたデータを表示するWebシステムを別に構築することも可能です。
Rubyでクローラーを作る
先ほど紹介したようにクローラーを作るには、Webブラウザと同等の機能を備えたライブラリと、データを格納するためのデータベース、そしてクローラーが収集したデータを表示するWebシステムが必要です。
そしてこれらは全てRubyでも利用できる機能です。次からRubyで作る場合に使うライブラリとその機能を紹介します。
スクライピング用のライブラリを使う
Rubyのようなプログラミング言語でWebサイトのデータを取得することをスクライピングと言いますが、Rubyでスクライピングする際によく使われるライブラリがNokogiriです。
NokogiriはRuby用の外部ライブラリを公開しているWebサイトのRubygemsから入手します。RubygemsからNokogiriをインストールするにはgemコマンドを使います。
なおNokogiriは、Rubyをインストールした際に同時にインストールされる外部ライブラリのopen-uriを利用します。Nokogiriの使い方に合わせてopen-uriの使い方も学習してください。
【関連記事】
▶【Ruby入門】nokogiriでスクレイピング
▶RubyでのスクレイピングにはNokogiriを使おう!
更新の有無をチェックしデータベースに保存する
Rubyのスクリプトを使って自動的にWebサイトの更新の有無をチェックする仕組みを作るには、OSに備わっている時刻指定でコマンドを実行する仕組みを使います。
まずは先ほどのスクライピング用のライブラリを使い、コマンドラインから実行可能なRubyのスクリプトを作ってください。それを時刻指定でコマンドを実行する仕組みに組み込み、一定の時刻で実行するように設定します。
そして更新結果の保存にデータベースにアクセスする機能を利用してください。データベースを直接する操作するにはSQLの知識も必要です。SQLの考え方はWebシステムの開発に必須の知識なので、ぜひ学んでおいてください。
このようにデータベースに保存しておけば、別途作成する表示システムを使ってクローラーの実行結果をいつでもチェックすることが可能です。
クローラーの処理結果はRailsで
クローラーが巡回して収集したデータを表示する仕組みをRubyで構築するとすれば、Ruby on Railsフレームワークを利用します。
なお、データによっては表計算ソフトで利用可能なフォーマットが必要なケースもあります。その場合、WebシステムといっしょにJSONを生成する機能を用意しておけば、JSONを介して表計算ソフトのマクロからデータを取得できます。このような仕組みも検討してください。
JSONとはJavaScript Object Notationの略で、テキストベースの構造データ表現フォーマットの1つです。WebブラウザのJavaScriptから非同期通信でサーバーからデータを受け取るためのフォーマットとしてよく使われており、構造が簡単で多くのデータを送れることから、他の用途でも利用できます。
まとめ
多くの情報がWebサイトで公開されており、定期的にチェックすれば最新情報が得られます。しかし、それを毎回見に行くのは面倒です。しかしスクレイピングの技術を使えば自動で定期的に最新情報を入手できます。そして、それを複数のWebサイトに対して実行できるのがクローラーです。
今回紹介したようにRubyのスクレイピング用ライブラリをRuby on Railsを活用することでクローラーを作ることが可能です。自社のビジネスに必要な最新の情報をインターネットから集める仕組みや、新しいサービスなどで活用してください。
クローラーの基になった言葉は英語の「crawler」で「はいずり回る」という意味です。そしてクローラーとは、Webサイトのリンクを使って別のサイトに移動しながら、まるではいずり回るようにそのサイトの情報を収集しています。