带有Rails和MongoDB的Anemone



我正在准备写我的第一个网络爬虫,看起来Anemone最有意义。有对MongoDB存储的内置支持,我已经在Rails应用程序中通过Mongoid使用MongoDB了。我的目标是存储抓取的结果,然后稍后通过Rails访问它们。我有几个问题:

1) 在这个页面的最后,它说"注意:每个存储引擎都会在开始新的爬网之前清除现有的Anemone数据。"如果我使用默认的内存存储,我希望这种情况会在爬网结束时发生,但这些记录不应该无限期地保存到MongoDB中,这样下次运行任务时就不会爬网重复的页面吗?如果它们在开始新的爬网之前被擦除,那么我应该在下一次爬网之前运行Rails逻辑吗?如果是这样的话,那么我最终将不得不检查上一次爬网中的重复记录。

2) 这是我第一次真正考虑在Rails模型的上下文之外使用MongoDB。看起来这些记录是使用Page类创建的,所以我以后可以像通常使用Mongoid那样查询这些记录吗?我想,一旦ORM提供了花哨的方法,它就被认为是一个"模型"了?

好问题。

1) 这取决于你的目标。

在大多数情况下,此默认设置是有意义的。其中一个用海葵爬行并检查数据。

当你进行新的爬网时,旧的数据应该被删除,这样新爬网的数据就可以取代它。

如果不希望发生这种情况,可以在开始新爬网之前将存储引擎指向新集合。

2) Mongoid不会为您创建模型类。

您需要定义模型,以便mongoid知道为集合创建一个类,并可以选择定义每个文档所具有的字段,以便您可以开箱即用地使用.访问器方法。

类似于:

class Page
  include Mongoid::Document
  field :url, type: String #i'm guessing, check what kind of docs anemone produces
  field :aliases, type: Array
  field ....
end

它可能需要包括以下字段:

  • url-页面的url
  • 别名-重定向到此页面的其他URL,或此页面重定向到的页面headers-完整的HTTP响应标头
  • code-HTTP响应代码(例如200、301、404)
  • body-原始HTTP响应正文
  • doc-页面正文的Nokogiri::HTML::文档(如果适用)
  • links-页面上指向同一域的所有URL的数组

但是,请看看存储引擎将它们存储为什么类型(字符串、数组等),不要做假设。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新