【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>
<h1><%= @elements %></h1>
と記述します。
この状態でターミナルから
$ rails s
ちなみに
<html>タグの中身だけ抜き取りたい時
getメソッドだと<html>タグを全文取得してしまいますので、タグの中身だけ取得したいというような場合には、inner_textメソッドを使用するとよいです。
先ほどと同様に、[app]>[views]>[class]>[index.html.erb]に移動して、
<h1>スクレイピング</h1>
<h1><%= @elements %></h1>
<h1><%= @elements %></h1>
だったものを、
<h1>スクレイピング</h1>
<% @elements.each do |ele| %>
<h1><%= ele.inner_text %></h1>
<% end %>
<% @elements.each do |ele| %>
<h1><%= ele.inner_text %></h1>
<% end %>
上記のようにコードを修正してみてください。
[図2]スクレイピングの取得結果 |
まとめ
webスクレイピングはmechanizeというgemを使用することで、誰でも簡単に実行することができますが、スクレイピングの違法性などについて十分に認識した上で実行してくださいね!参考文献
ずっとRailsでWebスクレイピングを
めちゃくちゃお世話になりました。ありがとうございます!!!
・Rails スクレイピングでデータを取得(getメソッド・searchメソッド編)備忘録
https://qiita.com/bomber0522/items/19591d18bc5d2b1fc97b
・Rails スクレイピング手法 Mechanizeの使い方
https://qiita.com/shizuma/items/d04facaa732f606f00ff
・Rails スクレイピングでデータを取得(getメソッド・searchメソッド編)備忘録
https://qiita.com/bomber0522/items/19591d18bc5d2b1fc97b
・Rails スクレイピング手法 Mechanizeの使い方
https://qiita.com/shizuma/items/d04facaa732f606f00ff
・岡崎市立中央図書館事件
コメント
コメントを投稿