Ruby
Nokogiri

Nokogiriで簡単なWebスクレイピング

More than 3 years have passed since last update.


Webスクレイピングってなんぞや?

WebのHTMLのデータを抽出することです。

あるサイトのH1のテキストだけを抽出したり、社員紹介の名前だけを抽出したり、画像を抽出したりと様々な用途があります。


Nokogiriってなんぞや?

Webスクレイピングでよく使われるRubyライブラリです。

イメージとしては、HTMLの構造を解析し、特定の要素をノコギリばりに切り出してくれます。


1. Nokogiriをインストール

まず、Nokogiriをインストールします。

gem install nokogiri


2. 松岡修造名言まとめサイトから名言を取得

まず、松岡修造名言まとめサイトにアクセスし、名言がそのサイトのHTMLのどの階層に格納されているのかを確認します。

スクリーンショット 2014-10-08 20.53.30.png

どうやら名言たちはpreタグに囲まれているみたいです。

そして、shuzo_meigen.rbを作成します。(ファイル名は自由です。)


shuzo_meigen.rb

require 'open-uri' #URLにアクセスする為のライブラリを読み込みます。

require 'nokogiri' #Nokogiriライブラリを読み込みます。

url = 'http://curazy.com/archives/6493'#切り出すURLを指定します。

charset = nil
html = open(url) do |f|
charset = f.charset #文字種別を取得します。
f.read htmlを読み込み変数htmlに渡します。
end

page = Nokogiri::HTML.parse(html, nil, charset) #htmlを解析し、オブジェクト化

shuzo_meigen = page.search('pre') #名言は<pre>タグに囲まれているので、<pre>タグを指定します。

p shuzo_meigen.text #shuzo_meigenで取得したデータをテキストに変換



3.ターミナルで叩いてみる。

ruby suzo_meigen.rbを叩いてみましょう。

以下のように取得できましたでしょうか?

"じゃんけんの必勝法は、強く握り締めたグーを出すことダメダメダメ!諦めたら!\r\n 周りのこと思えよ、応援してる人たちのこと思ってみろって!\r\n あともうちょっとのところなんだから!気にすんなよ!くよくよすんなよ!大丈夫、どうにかなるって!ドントウォーリー!ビーハッピー!やがて僕のレベルも知らず知らずに上がっていった。なぜなら、僕が戦う相手は、いつも自分より強かったからである一所懸命生きていれば、不思議なことに疲れない100回叩くと壊れる壁があったとする。\r\n (以下省略)・・・・

このように取得できていれば成功です。


まとめ

NokogiriでWebスクレイピングをする為に必要最低限すべきことは以下の通りです。

・スクレイピングするサイトのHTML構造を把握

・Nokogiriをインストール

・rubyスクリプトを作成

・ターミナルで実行

今回はスクレイピングのみですが、これをバッチ処理等で実行することで、ニュースサイトなどの更新頻度の高いサイトの新着ニュースや人気記事などを定期的に取得することが可能になります。

Railsで簡単なバッチ処理をしたい方は、下記リンクを参考にしてみてください。

Wheneverを使って簡単にバッチ処理をする。