代码之家  ›  专栏  ›  技术社区  ›  Trip

在Rails 3中玩Scrapi。。获取分段错误/中止陷阱

  •  3
  • Trip  · 技术社区  · 14 年前

    到目前为止我所做的。。

    sudo gem install scrapi
    
    sudo gem install tidy
    

    所以我做了这个:

    sudo port install tidy
    
    sudo cp libtidy.dylib /Library/Ruby/Gems/1.8/gems/scrapi-1.2.0/lib/tidy/libtidy.dylib
    

    然后我就开始跟着简单的火车走: http://media.railscasts.com/videos/173_screen_scraping_with_scrapi.mov

    就在贝茨先生完成第一次扑救之后 scrapitest.rb

    require 'rubygems'
    require 'scrapi'
    
    scraper = Scraper.define do
      process "title", :page_name => :text
      result :page_name
    end
    
    uri = URI.parse("http://www.walmart.com/search/search-ng.do?search_query=lost+season+3&ic=48_0&search_constraint=0")
    p scraper.scrape(uri)
    

    使用此代码:

    ruby scrapitest.rb
    

    /Library/Ruby/Gems/1.8/gems/tidy-1.1.2/lib/tidy/tidybuf.rb:39: [BUG] Segmentation fault
    ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
    
    Abort trap
    

    完全没有主意。。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community Egal    4 年前

    http://rubyforge.org/tracker/index.php?func=detail&aid=10007&group_id=435&atid=1744

    在tidy-1.1.2/lib/tidy中/潮间带:

    
      extern "void tidyBufInit(void*)"
    
    
      # tidyBufInit, using default allocator
      #
      def buf_init(buf)
        tidyBufInit(buf)
      end
    

    然后,在tidy-1.1.2/lib/tidy中/蒂迪布夫.rb:

    三。将此行添加到malloc下Tidybuf的initialize方法中:
    
       Tidylib.buf_init(@struct)
    

    
      # tidyBufInit, using default allocator
      #
      def buf_init(buf)
        @struct = TidyBuffer.malloc
        Tidylib.buf_init(@struct)
      end
    
    4为了完整性,请通过将分配器字段添加到TidyBuffer结构中来进行Brennan的更改,使其如下所示:
    
      TidyBuffer = struct [
        "TidyAllocator* allocator",
        "byte* bp",
        "uint size",
        "uint allocated",
        "uint next"
      ] 
    
        2
  •  1
  •   Trip    14 年前

    如果出现错误:

    这是因为数据类型在最新的Tidy(0.99)中不匹配(/usr/include/buffio.h-$Date:2007/01/23) 11:17:45 $ )

    解决办法是修补蒂迪布夫.rb:

    --- tidybuf.rb  2007-04-10 09:09:01.000000000 -0500
    +++ tidybuf.rb.patched  2007-04-10 09:08:55.000000000 -0500
    @@ -11,6 +11,7 @@
       # Mimic TidyBuffer.
       #
       TidyBuffer = struct [
    +    "int* allocator",
         "byte* bp",
         "uint size",
         "uint allocated",