久々にRubyでクローラー作成。
クローラー先は内緒で。
素敵にライブラリがあるので一瞬でデータを取ってこれちゃいます。
まずはgemでscrapiをインストール
1 2 3 |
<textarea class="ruby" cols="60" rows="5" name="code"> gem install scrapi </textarea> |
rubyファイルを作成。Scrape用のクラスを作成してみます。
scrape_site.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<textarea class="ruby" cols="60" rows="5" name="code"> require File.expand_path(File.dirname(__FILE__) + "/../config/environment") require "rubygems" require "open-uri" require "logger" require "scrapi" require "jcode" require "uri" class ScrapeSite SITE_URL = "http://**********" def scrape ################################################################### # サイトURL生成 ################################################################### url = SITE_URL url = NKF::nkf('-s -m0', url) url = URI.escape(url) ################################################################### # スクレイピング ################################################################### html = NKF::nkf('-w -m0', open(url).read) places = Scraper.define do process "table.tbl td.price", "prices[]" => :text process "table.tbl td.detail b", "details[]" => :text process "table.tbl td.image a img", "images[]" => "@src" process "table.tbl span.title", "titles[]" => :text result :prices, :titles, :details, :images end values = places.scrape(html, :parser_options => {:char_encoding=>'utf8'}) end end st = Scrape.new st.scrape </textarea> |