Скрабыт не будет работать с окнами - PullRequest
0 голосов
/ 02 марта 2011

Я использую Windows XP.Я только что установил последнюю версию Ruby (1.9) - Hpricot, Mechanize и Scrubyt установлены без каких-либо проблем.Я пытался работать с простейшими примерами, которые я мог найти, чтобы получить работу Скрабыта.пример:

require 'rubygems'
require 'scrubyt'

data = Scrubyt::Extractor.define do
fetch 'http://google.com'
title '//head/title'
end

data.to_xml.write($stdout, 1)

, но я получаю сообщение об ошибке:

C:/ruby/lib/ruby/gems/1.9.1/gems/scrubyt-0.4.06/lib/scrubyt.rb:1: warning: varia
    ble $KCODE is no longer effective; ignored
    C:/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': no
    such file to load -- jcode (LoadError)
            from C:/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `
    require'
            from C:/ruby/lib/ruby/gems/1.9.1/gems/scrubyt-0.4.06/lib/scrubyt.rb:2:in
     `<top (required)>'
            from C:/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:53:in `
    require'
            from C:/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:53:in `
    rescue in require'
            from C:/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `
    require' from te.rb:2:in `<main>'

Я пробовал несколько стартовых примеров, все они выдают одно и то же сообщение об ошибке.Я только начал с ruby ​​сегодня, так что не могу понять, что происходит.

Спасибо!

1 Ответ

1 голос
/ 02 марта 2011

Кажется, scrubyt не готов к Ruby 1.9, так как jcode использовался в 1,8 - для решения проблем кодирования . Начиная с 1.9, ruby ​​имеет лучшую поддержку кодирования (особенно utf-8) и поэтому больше не нуждается в jcode.

С 1.9.2:

sebastien@greystones:~/dev$ rvm 1.9.2-head
sebastien@greystones:~/dev$ ruby -v 
ruby 1.9.2p94 (2010-12-08 revision 30140) [x86_64-linux]
sebastien@greystones:~/dev$ ruby -e 'require "rubygems"; require "scrubyt"'
/home/sebastien/.rvm/gems/ruby-1.9.2-head/gems/scrubyt-0.4.06/lib/scrubyt.rb:1: warning: variable $KCODE is no longer effective; ignored
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- jcode (LoadError)

С 1.8.7:

sebastien@greystones:~/dev$ rvm 1.8.7-head
sebastien@greystones:~/dev$ ruby -v 
ruby 1.8.7 (2010-12-23 patchlevel 330) [x86_64-linux]
sebastien@greystones:~/dev$ ruby -e 'require "rubygems"; require "scrubyt"'
sebastien@greystones:~/dev$ 

Я попытался изменить файлы Scrubyt следующим образом, чтобы обойти эту проблему:

unless "".respond_to? :each_char
  $KCODE = "u"
  require "jcode"
end

и возникли дальнейшие проблемы ... Так что потребуется больше работы, чтобы Scrubyt работал с ruby ​​1.9.

FWIW, ваш вариант использования более чем вероятно более сложен, но ваш пример можно сделать с помощью Mechanize (который Scrubyt использует внутри):

 require 'rubygems'
 require 'mechanize'

 a = Mechanize.new { |agent|
   agent.user_agent_alias = 'Mac Safari'
 }

 a.get('http://google.com/') do |page|
   puts page.title()
 end
...