#はじめに
初学者がポートフォリオ作成でハマったことをメモします。
今回はスクレイピングをする為にMechanizeというgemを使用しました。
Nokogiriというgemもスクレイピングに使われるみたいです。
##環境
Ruby 2.6.3 ,Rails 5.2.4
##やりたいこと
webサイト(単一のページ)から特定の要素を抜き出してデータベースに保存する。
##手順
・ gemをインストール
gem 'mechanize'
$ bundle install
$ rails generate model Scraping
mechanizeをrubyファイルで利用するためにrequire 'mechanize' をファイルの先頭に記述。
require 'mechanize'
def self.scrape
agent = Mechanize.new #agentは任意の変数
page = agent.get("https://www......") #pageは任意の変数 getの引数はサイトのURL
elements = page.search('div.idxcol a') #div.idxcol aは取得したい要素 elementsは任意の変数
elements.each do |element|
fish = Fish.new #Fishは任意のクラス、fishは任意のインスタンス
fish.name = element.inner_text
fish.save
end
end
end
agentという変数にMechanizeクラスのインスタンスを代入。
ウェブサイトからHTML情報をgetというメソッドで取得し、pageという変数代入。
任意の変数elementsに、ページ内でほしい要素に付いているクラス名やタグ名を指定。
eachメソッドを使ってelementsから要素を一つづつ取り出だす。
Fishクラスからインスタンスを作成。
inner_textメソッドで要素からテキストのみを取得してしてfishテーブルのnameカラムに代入。
今回はFishクラスのnameカラムにスクレイピングした値を代入したい。
(Fishクラス、fishesテーブル、nameカラムは事前に作成しています。)
最後にsave。
・ターミナルで定義したクラスメソッドを実行
$ bundle exec rails console
pry(main)>Scraping.scrape
これでデータが入っているはずです。
以上
##最後に
誰かのお役にたてれば幸いです。
間違えている部分があればコメントお願いいたします。
参考にした記事
https://qiita.com/4npei/items/2dc18487d3103cb3e5a6
https://qiita.com/takuyanin/items/01256773e1cbfc84f51a
https://freesworder.net/ruby-on-rails-scraping/