RubyクローラーでOOP意識してみた

こんにちは!2017年新卒SEの岡本と申します。
業務改善系の部署に配属され、毎日まわりの先輩方から刺激をもらい仕事しています。
私の部署は最高の部署です。

今回は、プログラミング初心者の私が、業務でも使用しているRubyを用いて簡単なクローラを開発したいと思います。

クローラー開発

OOPのことも考えて、コードを書いてみました。
アドウェイズのTopをクロールして画像を取得するクローラです。

呼び出し

site  = AdwaysTop.new(url:"adways.html", title:"adwaysTopクロール")

Siteクラス

require 'cgi'
require 'open-uri'
require 'rss'
require 'kconv'

class Site
  def initialize(url:"", title:"")
    @url   = url
    @title = title
  end

  def open_page_source
    @page ||= open(@url, $:read).toutf8
  end

  class AdwaysTop < Site
    def parse_html
      image_data  = open_page_source.scan(#top_page > div.wrap > main > div.first_view > div.main_visual > picture > img)
      image_title = open_page_source.scan(#global_header > div.header_contents > p > a > picture > img)
    end
  end
end

他のサイトに応用したい場合にはサブクラスとparseを定義することで、応用が可能かと思います。

Formatクラス

class Format
  attr_reader :url, :title
  def initialize(site)
    @url   = site.url
    @title = site.title
  end
end

Formatクラスではクロール先のURLとタイトルを表示させるために作成しました。画像を表示させるため別途出力のクラスが必要となります。

結果

今回は自社のTopページ内にある画像データの取得をしてみました。

"viewing_ulr":adways.html
"title":adwaysTopクロール
"image":"http://adways.net/img/top/main_visual@sp.jpg"
"image":"http://adways.net/img/common/header_logo@2x.png"

f:id:AdwaysEngineerBlog:20171012205934j:plain f:id:AdwaysEngineerBlog:20171012205950p:plain

まとめ

クローラはサイトによっては迷惑がかかることがあるので、注意して楽しみましょう。
Rubyには便利なgemが数多くあるので賢く使えたらいいなと思います。頼りすぎて中身を理解しないで使うのはダメですが...

初心者でもプログラムを楽しめるRubyってすごいです!
早く先輩方のように仕事ができるように勉強は続けていきます^^