酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

【Rails初学者向け】Nokogiriをつかって他のWebサイトから情報を取得しよう

ここでは、Rails初学者向けにWebサイトから情報を収集してくるチュートリアルを紹介します。 Nokogiriを使ったサンプルアプリを作ります!


Nokogiriの基本的な説明

Nokogiri を使った Rubyスクレイピング

プロジェクトを作成

ローカル開発の場合

ターミナルで以下のコマンドを実行してください。

1
2
3
4
5
# 新しいRailsアプリを作成
rails new web_scraping_sample --skip-bundle

# web_scraping_sample のフォルダに移動
cd web_scraping_sample

Cloud 9の場合

  • Cloud9』にログインして新しいworkspaceを作成
  • 公開していい場合は public 、公開したくない場合は private のRailsアプリを作成してください

Gemfileに以下を追加

プロジェクト直下のGemfileを開いて以下を追加して下さい。

1
2
# Web Scraping
gem 'nokogiri'

追加したらターミナルで以下のコマンドを実行します。

1
bundle install --jobs=4 --path=vendor/bundle

Ruby Gemライブラリをインターネットから持ってきて、自動でローカルに保存します。

rake タスクの作成

Rakeタスクを作成します。ターミナルで以下のコマンドを実行してください。

1
2
# railsコマンドで rake タスク を作成(generate)します
rails g task scrape

すると、lib/tasks/scrape.rake が作成されます。

ちなみに、Rake とはRubyで記述されたプログラムをコマンドプロンプト(ターミナル)から呼び出し、実行することができる仕組みのことです。

rakeタスクをもう少し知りたい場合は、「Rakeタスクをつくる」がオススメです!

取得スクリプトを書く

今回は NaverまとめのTechページからタイトルの一覧を取得する手順です。

lib/tasks/scrape.rakeを開いて以下の内容を追記してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# URLにアクセスするためのライブラリの読み込み
require 'open-uri'

namespace :scrape do

  desc 'NaverまとめのTechページからタイトルを取得'
  task :naver_title => :environment do
    # スクレイピング先のURL
    url = 'http://matome.naver.jp/tech'

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

    # htmlをパース(解析)してオブジェクトを作成
    doc = Nokogiri::HTML.parse(html, nil, charset)

    doc.xpath('//li[@class="mdTopMTMList01Item"]').each do |node|
      # タイトルの取得
      puts node.css('h3').inner_text
    end
  end

end

これを実行すると以下の様になります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bundle exec rake scrape:naver_title

# => 写真撮って探しものができるアプリ3選
# => 洋楽好き必見!!音楽の世界が広がるアプリ7選
# => スマホやPCの「ブルーライト」の量が破壊的!健康対策は大丈夫?
# => 趣味はかどるわー!ディープなSNSがこんなにあった(゚д゚)
# => ちょっとしたシーンで役立つ10のショートカットキー
# => ネイルでスマホを操れる?『爪センサー』が画期的
# => 壁を有効活用したい・・!お洒落な「壁掛けアイテム」たち
# => Googleも開始。「パスワードなし」でログインの時代キタ?
# => イヤホンの音がクリアに…!身近ガジェットの簡単お手入れ法
# => 日本にもこれ欲しい!海外で発売されている斬新な便利グッズ
# => 次々と数億円を集めるスタートアップが魅力的だった
# => 3Dじゃない方のプリンターも面白いのがたくさんあった
# => なにこれスゴい!自転車を盗んだヤツを見つける最新グッズ
# => トラックボールで作業効率UP!もうマウスなんて使わない!
# => 可視化でわかりやすく!医療の見える化が思った以上に見えている!
# => 眠れない夜にさよなら「本当に熟睡出来る」評判の快眠アプリ5選
# => エネループの代わりになる「おしゃれな」充電池たち
# => なにこれすごい…アメリカ軍の開発が未来を先取りしてる
# => 手に着けるだけのリストバンド型ガジェットで健康を記録する
# => AppleWatchピンチ?進化したスマートウォッチのいま

Nokogiriで参考になりそうなサイト

実際にNokogiriのコードを書くときに役に立ちそうなチートシート的なサイトを紹介しておきます。


Special Thanks

初心者向けのRuby on Railsの用語説明

おすすめの書籍