Ruby 如何防止海葵储存某些信息?

Ruby 如何防止海葵储存某些信息?,ruby,mongodb,web-scraping,web-crawler,Ruby,Mongodb,Web Scraping,Web Crawler,我正在使用一些网络爬虫。我正在MongoDB中存储爬网的结果。海葵可以很容易地做到这一点: Anemone.crawl("http://www.example.com/") do |anemone| anemone.storage = Anemone::Storage.MongoDB end 作为 然而,使用上面的代码,海葵收集并存储了很多我不需要的信息,包括每个页面的响应。我只需要存储URL。而且,尽管花了很多时间和我在一起,我还是不知道如何告诉海葵不要储存某些信息 有人能提

我正在使用一些网络爬虫。我正在MongoDB中存储爬网的结果。海葵可以很容易地做到这一点:

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

然而,使用上面的代码,海葵收集并存储了很多我不需要的信息,包括每个页面的响应。我只需要存储URL。而且,尽管花了很多时间和我在一起,我还是不知道如何告诉海葵不要储存某些信息


有人能提供建议吗?

您需要调整页面类,使其不会存储额外的数据。比如:

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
我已经有一段时间没有看到内部内容了,但如果我没记错的话,页面需要包含链接、深度、获取的内容和一些其他元数据,这样它就知道已经爬网了什么,还需要做什么


希望这有帮助。

您需要调整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
我已经有一段时间没有看到内部内容了,但如果我没记错的话,页面需要包含链接、深度、获取的内容和一些其他元数据,这样它就知道已经爬网了什么,还需要做什么


希望这能有所帮助。

在使用ruby 1.9.2的Rails 3.0.10中,似乎必须使用initilizer

config/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

在使用ruby 1.9.2的Rails 3.0.10中,似乎必须使用initilizer

config/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
上的“我如何使用它?”部分似乎朝着满足您需求的正确方向前进。上的“我如何使用它?”部分似乎朝着满足您需求的正确方向前进。