2011-04-20 54 views
0

我正在使用Anemone进行一些网络爬行。我在MongoDB中存储蜘蛛的结果。银莲花很容易做到这一点:如何防止银莲花存放某些信息?

Anemone.crawl("http://www.example.com/") do |anemone| 
    anemone.storage = Anemone::Storage.MongoDB 
    end 

as specified here

但是,使用上面的代码,Anemone会收集并存储大量我不需要的信息,包括每个页面的响应。我只需要存储URL。而且,尽管花费时间与the documentation,我不知道如何告诉银莲花而不是来存储某些信息。

任何人都可以建议吗?

+0

的 “我如何使用它?”关于[rubyforge主项目页面](http://anemone.rubyforge.org/index.html)的部分似乎正朝着正确的方向迎合您的需求。 – jball 2011-04-20 17:48:09

回答

2

您需要调整Page类,以便它不会存储额外的数据。因此,像:

module Anemone 
    class Page 
    def to_hash 
     {'url' => @url.to_s, 
     'links' => links.map(&:to_s), 
     'code' => @code, 
     'visited' => @visited, 
     'depth' => @depth, 
     'referer' => @referer.to_s, 
     'fetched' => @fetched} 
    end 
    def self.from_hash(hash) 
     page = self.new(URI(hash['url'])) 
     {'@links' => hash['links'].map { |link| URI(link) }, 
     '@code' => hash['code'].to_i, 
     '@visited' => hash['visited'], 
     '@depth' => hash['depth'].to_i, 
     '@referer' => hash['referer'], 
     '@fetched' => hash['fetched'] 
     }.each do |var, value| 
     page.instance_variable_set(var, value) 
     end 
     page 
    end 
    end 
end 
Anemone.crawl("http://www.example.com/") do |anemone| 
    anemone.storage = Anemone::Storage.MongoDB 
end 

它已经有一段时间,因为我已经看了看内部,但如果我没有记错,页面需要包含的链接,深度,获取和其他一些元数据,因此它知道它已经抓取的内容以及剩下的内容。

希望这会有所帮助。

1

在Rails 3.0.10与红宝石1.9.2似乎你必须使用一个initilizer。

配置/ initilizers/anemone.rb

Anemone::Page.module_eval do 
    def to_hash 
    {'url' => @url.to_s, 
    'links' => links.map(&:to_s), 
    'code' => @code, 
    'visited' => @visited, 
    'depth' => @depth, 
    'referer' => @referer.to_s, 
    'redirect_to' => @redirect_to.to_s, 
    'response_time' => @response_time, 
    'fetched' => @fetched} 
    end 

    def self.from_hash(hash) 
    page = self.new(URI(hash['url'])) 
    {'@links' => hash['links'].map { |link| URI(link) }, 
    '@visited' => hash['visited'], 
    '@code' => hash['code'].to_i, 
    '@depth' => hash['depth'].to_i, 
    '@referer' => hash['referer'], 
    '@redirect_to' => URI(hash['redirect_to']), 
    '@response_time' => hash['response_time'].to_i, 
    '@fetched' => hash['fetched'] 
    }.each do |var, value| 
     page.instance_variable_set(var, value) 
    end 
    page 
    end 
end