【Rails6】mechanizeでWebスクレイピングをやるよ!

この記事の概要

mechanaizeというgemを使って、webスクレイピングを試してみました。

目次

  • この記事の概要
  • 目次
  • 注意
  • やってみよう
  • 参考文献

注意

スクレイピングをするサイトによっては、意図的にサーバーダウンを起こすことにも繋がり、場合によっては逮捕・起訴されることもあります。また、著作権などを著しく侵害する場合もあるので、基本的には自己責任でWebスクレイピングをやるようにしてください。事件になった例について、詳しくは岡崎市立中央図書館事件などを参照されるといいと思います。

やってみよう


事前準備編

まず[rails new]コマンドで、sampleAppという名前のアプリケーションを作成します。
 $ rails new sampleApp 
その後cdコマンドでディレクトリを移動して、
 $ cd sampleApp 
クラスを作ります。今回はclassという名前のControllerを作りたいので、第4引数に[Class]を指定してあげます。
 $ rails g controller Class 

controller編

[app] > [controllers] > [class_controller.rb]に移動します。

デフォルトで、こう書いてあると思うので
class ClassController < ApplicationController
end

class ClassController < ApplicationController
    def index
       agent = Mechanize.new
        page = agent.get("https://www.yahoo.co.jp/")
        @elements = page.search('h1') # h1要素を検索
    end
end

こう修正します。

今回はYahoo!のトップページからスクレイピングを行いたいので、pageのagent.getの引数にはYahoo!のアドレスである("https://www.yahoo.co.jp/")を指定してあげます。

続いて[app]>[views]>[class]>[index.html.erb]に移動して、

<h1>スクレイピング</h1>
<h1><%= @elements %></h1>

と記述します。

この状態でターミナルから
$ rails s
を立ち上げてlocalhost:3000にアクセスすると...

[図1]スクレイピングの実行結果
こんな感じで、htmlタグが出力できていると思います!

ちなみに

<html>タグの中身だけ抜き取りたい時

getメソッドだと<html>タグを全文取得してしまいますので、タグの中身だけ取得したいというような場合には、inner_textメソッドを使用するとよいです。

先ほどと同様に、[app]>[views]>[class]>[index.html.erb]に移動して、

<h1>スクレイピング</h1>
<h1><%= @elements %></h1>

だったものを、
<h1>スクレイピング</h1>

<% @elements.each do |ele| %>
     <h1><%= ele.inner_text %></h1>
<% end %>



上記のようにコードを修正してみてください。

[図2]スクレイピングの取得結果
こんな感じで取得できていればWebスクレイピングがちゃんとできています!

まとめ

webスクレイピングはmechanizeというgemを使用することで、誰でも簡単に実行することができますが、スクレイピングの違法性などについて十分に認識した上で実行してくださいね!

参考文献

ずっとRailsでWebスクレイピングを
めちゃくちゃお世話になりました。ありがとうございます!!!

・Rails スクレイピングでデータを取得(getメソッド・searchメソッド編)備忘録
https://qiita.com/bomber0522/items/19591d18bc5d2b1fc97b

・Rails スクレイピング手法 Mechanizeの使い方
https://qiita.com/shizuma/items/d04facaa732f606f00ff

・岡崎市立中央図書館事件

コメント

このブログの人気の投稿

【Unity】シーンギズモがデフォルトで表示されない時

【Swift4】argument passed to call that takes no arguments の解決策

【Rails5】SyntaxError: (): mapping values are not allowed エラーの解決法