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

【Rails】mechanizeを使えばrailsスクレイピングが余裕な件 - Qiita

Rails スクレイピング手法 Mechanizeの使い方 - Qiita