Как предотвратить анемон для хранения определенной информации? - PullRequest
0 голосов
/ 20 апреля 2011

Я использую Анемон для паутины.Я храню результаты паутинга в MongoDB.С помощью Anemone очень просто сделать это:

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

как , указанное здесь .

Однако, используя приведенный выше код, Anemone собирает и сохраняет много информациичто мне не нужно, в том числе ответ каждой страницы.Мне нужно только хранить URL-адреса.И, несмотря на то, что я трачу время на документацию , я не могу понять, как сказать Anemone не хранить определенные фрагменты информации.

Кто-нибудь может посоветовать?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2011

Вам необходимо настроить класс 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 голос
/ 16 ноября 2011

В Rails 3.0.10 с ruby ​​1.9.2 кажется, что вы должны использовать инициализатор.

конфиг / 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
...