Railsで画像をスクレイピングして表示させる
したいこと
コンビニの新着商品ページから画像などをスクレイピングしてDBなどに保存したりせずに直接表示させたい
準備
MechanizeというGemをインストール
gem 'mechanize'
$ bundle install
Controllerに記述
def index agent = Mechanize.new #getの引数にデータを取得したいサイトのURLを渡す from_lawson = agent.get("https://www.lawson.co.jp/recommend/original/dessert/") @lawson_new_items = from_lawson.search('article#dessert li').first(4) end
searchメソッドはcssを指定する要領で要素を指定できます、デベロッパーツールを開いてDOMツリーを見ながらやるといい感じです
viewに表示
<% @lawson_new_items.each do |item| %> <div> // imgタグのsrcを確認してパスがフルで指定されていない場合、自分で一度画像を開くなどしてurlを確認し補ってあげます <%= link_to 'https://www.lawson.co.jp/' + item.search('a').attribute('href'), target: '_blank' do %> <img src="https://www.lawson.co.jp/<%= item.search('img').attribute('src') %>" /> <% end %> <div> <p> <small><%= item.search('img').attribute('alt') %></small><br> <small><%= item.search('p.price').inner_text %></small> </p> </div> </div> <% end %>
タグ内のalt, href,srcなどの属性はattribute()メソッドを使って取得します 。
参考
【rails】webサイトからスクレイピングしたデータをデータベースに保存する方法 - Qiita