Ruby on Railsアプリでスクレイピングする方法を忘れないうちに
どうも、Linです。アイスに移行してます。
「Ruby on Railsで他のウェブサイトからの情報を掲載できるアプリを作りたい」
そんな時におすすめなのが、
スクレイピング
という技です。
スクレイピングとは、Wikipediaによると、
ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと
らしいですね。
なんと、そのウェブサイトから情報を抽出する技をRailsアプリでも実現できるというのです。
今日はこちらのQiitaの解説を見ることでスクレイピングをマスターできたきがするので、忘れないうちに書き留めておこうと思います。
スクレイピングの方法は、Mechanizeというgemを使った方法です。
Ruby on RailsのアプリでMechanizeを使ってスクレイピングする方法
アプリ例として、freesworderの記事タイトルを取得するアプリを作ってみましょう。
Step1. アプリを作る
まずは、スクレイピング用のRailsアプリを作ってみましょう。
新規Railsアプリの作成はrails newでしたね?
今回は「scraping」という名前のアプリを作成していきます。
1 |
$rails new scraping |
Step2. アプリのディレクトリに移動
アプリ開発を進めるために、先ほど作成したscrapingというアプリのディレクトリに移動しちゃいましょう。
1 |
$cd scraping |
Step3. コントローラー作成
Railsアプリの脳とも言えるコントローラーを作成していきます。
今回は適当にtopという名前のコントローラーを作ってみました。
1 |
$rails g controller top |
Step4. コントローラー編集
続いて、スクレイピングのgemである「mechanize」をアプリに取り入れましょう。
Gemfileの最後に、
1 |
gem 'mechanize' |
を追加。
そして、Gemfile編集後のおきまりの、
1 |
$bundle install |
を実行してください。
Step5. コントローラー編集
viewファイルでスクレイピングした変数を受け取れるように、コントローラーでスクレイピング用のデータを目的のサイトから引っ張ってきます。
まずは、topコントローラーに「home」というアクションを追加します。
top_cotnroller.rb
1 2 3 4 5 6 |
class TopController < ApplicationController def home end end |
続いて、homeアクションにスクレイピング部分を追記。
1 2 3 4 5 6 7 8 9 10 11 12 |
class TopController < ApplicationController def home agent = Mechanize.new page = agent.get("https://freesworder.net") @elements = page.search('.entry-title') end end |
これは、agentという変数にMechanizeクラスのインスタンスを代入。
その後、pageという変数に「https://freesworder.net」というウェブサイトからHTML情報をgetというメソッドで、Mechanizeインスタンスから抜き出したものを代入します。
次に、@elementsというViewファイルでも使えるクラス変数に、「https://freesworder.net」のトップページにある「entry-title」というクラスのついてる要素を配列形式で入れて行ってます。
以上で、コントローラーの編集は終了です。
Step6. ルーティング編集
先ほど定義したtopコントローラーのhomeアクションがviewページで確認できるようにルーティングファイルを編集します。
config/routes.rb
1 2 3 4 5 |
Rails.application.routes.draw do root 'top#home' end |
これでトップページに飛ぶと、homeアクションが実行されるというわけですね。
Step7. Viewファイル作成で表示を確認
結果を表示するビューファイルを作成します。
home.html.erb
というファイルをapp/views/top以下に作成。
スクレイピング情報を配列で綺麗に取り出せるように、home.html.erbを下記のように編集します。
1 2 3 4 5 |
<%@elements.each do|element|%> <p><%= element.inner_text%></p> <%end%> |
Step8. 結果を確認
これで終了。
まずはテストサーバーを立ち上げます。
1 |
$rails s |
この状態で、
http://localhost:3000/
にアクセスしてみましょう。
すると、こんな感じでfreesworderの記事のタイトルがズラーっと並んでいるのではないでしょうか??

これは全然不吉な兆候ではなく、Railsアプリでスクレイピングに成功した証拠です。
Ruby on Railsアプリでスクレイピングにチャレンジしてみたい方は参考にしてみてくださいね。
それでは!
Lin

おそらく、ブロガー。現在ホテル暮らしで全国フラフラしています。
ネット広告代理店に1年3ヶ月勤め上げ、独立をして丸4年が経ちました。今年でフリーランス 5年目。
質問・ご意見・相談があればLINEで受け付けていますのでお気軽にどうぞ 。
非常に参考になりましたありがとうございます。
おお!!ありがとうございます!!