こんにちは!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"
まとめ
クローラはサイトによっては迷惑がかかることがあるので、注意して楽しみましょう。
Rubyには便利なgemが数多くあるので賢く使えたらいいなと思います。頼りすぎて中身を理解しないで使うのはダメですが...
初心者でもプログラムを楽しめるRubyってすごいです!
早く先輩方のように仕事ができるように勉強は続けていきます^^