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

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


🍄 Nokogiriの基本的な説明

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

🗽 プロジェクトを作成

ローカル開発の場合

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

# 新しいRailsアプリを作成
rails new web_scraping_sample --skip-bundle
# web_scraping_sample のフォルダに移動
cd web_scraping_sample

Cloud 9の場合

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

😸 Gemfileに以下を追加

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

# Web Scraping
gem 'nokogiri'

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

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

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

🐝 Rakeタスクの作成

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

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

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

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

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

🎃 取得スクリプトを書く

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

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

# 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

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

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

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

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

🍣 参考リンク

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

📚 おすすめの書籍

💩 欲しいものリスト公開しました