トップ «前の日記(2006-10-10) 最新 次の日記(2006-10-16)» 編集

3 日坊主日記


2006-10-11 [長年日記]

_ [Ruby] scrapi - ScrAPI toolkit for Ruby

 $ gem install scrapi

だとlib/にlibtidy.dll libtidy.soが置かれるのだけど

 scraper/reader.rb:
     def find_tidy()
       return if Tidy.path
       begin
         Tidy.path = File.join(File.dirname(__FILE__), "../tidy", "libtidy.so")
       rescue LoadError
         begin
           Tidy.path = File.join(File.dirname(__FILE__), "../tidy", "libtidy.dll")
         rescue LoadError
           Tidy.path = File.join(File.dirname(__FILE__), "../tidy", "libtidy.dylib")
         end
       end
     end

これだと先にlibtidy.soを読んでしまい(なにやら警告が出て)うれしくないなあ。

とりあえずlibtidy.so.0にrenameしてにげ。(よわ

tidyはShift_JISに対応している。

 # imode-scrap.rb
 require 'rubygems'
 require 'scrapi'
 require 'open-uri'
 require 'pp'

 html = File.read('imode-emoji.htm')
 ImodeEmoji = Struct.new *%w[ImodeEmoji no sjis16 sjis10 unicode title color]

 scraper = Scraper.define do
   def initialize(*args)
     super
     @ret = []
   end
   selector :select_span, "td>span.text01"
   process "table>tr.bg-ffffff" do |tr|
     @ret << ImodeEmoji.new(*select_span(tr).map { |span| self.class.text(span) })
     true
   end
   attr_reader :ret
 end
 scraper.parser_options :show_warnings => true, :char_encoding => 'shiftjis'
 imode_emoji_list_uri =
   'http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/list/'
 pp scraper.scrape(URI.parse(imode_emoji_list_uri)).ret
 [#<struct Struct::ImodeEmoji
   no="1",
   sjis16="F89F",
   sjis10="63647",
   unicode="E63E",
   title="晴れ",
   color="赤">,
  #<struct Struct::ImodeEmoji
   no="2",
   sjis16="F8A0",
   sjis10="63648",
   unicode="E63F",
   title="曇り",
   color="青">,
 ...

列の切り分け方が分からず悩んだ。

列数固定なら単純に

   array :contents
   process "table>tr.bg-ffffff>td>span.text01", :contents => :text
   return :contents

としてもいいかもだけど…ううむ。

[]