RubyのスクレイピングライブラリNokogiriの使い方チュートリアル

RubyのプログラミングやUnitテストの書き方も少しづつ分かってきたので、少し応用編でRubyを使ったWebスクレイピングをしてみようと思います。スクレイピングというのは、どこぞのWebサイトで公開されているコンテンツを、プログラミングを使って手元にガポッと取ってくるというあれです。

まず、Nokogiriを手元のMacbook Airにインストールする

公式サイトのインストール方法説明を参考にします。例の通り英語サイトですが、最近意識して英語読むようにしてるので、アレルギー無く読めるようになってきました。

インストールは簡単で、

の一発で入るようです。このgemはRubyの外部ライブラリを管理してくれるパッケージマネージャーのようなものらしいですが、System領域にどんどんgemを入れていると管理が煩雑になってくる(と先人が警告している)ので、bundleというgemをプロジェクト単位で管理してくれるものを使ってnokogiriをインストールすることにします。

その前に、公式サイトの説明では、Macにlibxml2、libxsltという2つのライブラリを先に入れておいてねとの説明があるので、MacのパッケージマネージャであるHomebrewを使ってこの2つのライブラリを入れます。

インストール完了とともに、ビールのマークが表示されます。作者さんの神経が分かりません。夕方疲れたころにこのマークは辞めてください。全てを捨ててビールを飲むために帰りたくなります。(゚A゚;)ゴクリ

次にBundleを使ってgemでnokogiriをインストールしていきます。まずは、カレントディレクトリをBundle管理のフォルダに指定が必要のようです。

あとで知りましたが、–path には通常、vendor/bundleというディレクトリをプロジェクトごとに指定するのが通のようです。あと、bundleのプロジェクトごとの初期化はbundle initを使うようです。知らなかった…。

次に、gemの管理リストであるGemfileを作ります。(bundle initを使っていれば、Gemfileのガワが自動生成されます。)

Gemfile

そしたら、Bundleを使ってNokogiriをインストールします。

このインストール3分くらい応答が帰って来なくて、やべ、フリーズか・・・と不安になりましたが、待ったらしっかりインストール完了してくれました。良かった。。ε-(´∀`*)

後から気付きましたが、すでにnokogiriがシステムに入ってたようで、nokogiri追加になってしまってました。bundle管理のnokogiriを使うにはbundle execを頭に付けて使うと良いようです。

nokogiriでとにかうスクレイピングやってみる

ひとまずnokogiriの動作確認として、チュートリアルサイトの通りYahooのタイトル取得のプログラムを書いてみます。

サイトの新着記事一覧から情報を取ってきて、タブ区切りファイルにまとめる

nokogiriのスクレイピングでは、HTML構造をてっぺんからたどっていくことで目的の情報を探し当てるというアプローチになりますが、基本的にはnokogiriのCSSメソッドを使うだけで必要十分なことができそうです。

情報サイトから新着記事一覧の、タイトル、画像URL、記事URLを取得するコードを以下のように作成しました。一点注意なのは、画像URLを取得するときにattribute(‘src’)で取ろうとすると、画像URLがダミーファイルに置き換えられる罠が隠されています。怖いですね。なので、attribute(‘data-original’)を指定する必要があります。

完成したコードは以下です。

このコードを実行すると以下の結果が得られます。

スクレイピングの応用編はまた次回

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です