我正在使用海葵进行一些网络爬行。我正在MongoDB中存储蜘蛛的结果。海葵可以很容易地做到这一点:
Anemone.crawl("http://www.example.com/") do |anemone|
anemone.storage = Anemone::Storage.MongoDB
end作为在此指定。
但是,使用上面的代码,Anemone收集并存储了很多我不需要的信息,包括每个页面的响应。我只需要存储URL。而且,尽管我花时间和文献资料在一起,我还是想不出如何告诉Anemone不要存储某些信息。
有人能告诉我吗?
发布于 2011-04-23 01:35:36
您需要调整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我已经有一段时间没有看过内部信息了,但是如果我没记错的话,页面需要包含链接、深度、获取和其他一些元数据,这样它就知道它已经爬行了什么,它还剩下了什么。
希望这能有所帮助。
发布于 2011-11-16 14:47:24
在Rails 3.0.10和ruby1.9.2中,您似乎必须使用初始化器。
config/initilizer/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
endhttps://stackoverflow.com/questions/5734360
复制相似问题