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
としてもいいかもだけど…ううむ。
[ツッコミを入れる]
[]
