【问题标题】:How to Prevent Anemone from Storing Certain Information?如何防止海葵存储某些信息?
【发布时间】:2011-04-20 17:39:16
【问题描述】:

我正在使用Anemone 进行一些网络爬取。我将爬取的结果存储在 MongoDB 中。 Anemone 可以很容易地做到这一点:

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

作为specified here

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

谁能给点建议?

【问题讨论】:

标签: ruby mongodb web-scraping web-crawler


【解决方案1】:

您需要调整 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

我已经有一段时间没有查看内部结构了,但如果我没记错的话,页面需要包含链接、深度、获取的和一些其他元数据,以便它知道它已经爬取了什么以及什么它还没有完成。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    在带有 ruby​​ 1.9.2 的 Rails 3.0.10 中,您似乎必须使用初始化程序。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多