Node / MongoDB scraper - 删除不再有效的记录

时间:2013-06-06 02:20:13

标签: node.js mongodb web-scraping

这似乎是一件非常简单的事情,但我找不到任何真正解释如何做的讨论。

我正在使用MongoDBNode.js构建一个刮刀。它每天运行一次并擦除数百个URL并记录到数据库。例如:

  1. Scraper转到this google image search page for "stack overflow"
  2. Scraper从此页面获得前100名链接
  3. 链接的urlimg srcpage titledomain name的记录会保存到MongoDB。
  4. 这就是我想要实现的目标:

    • 如果图片不再出现在100条抓取的链接中,我想将其从databqse中删除
    • 如果图片仍在100个抓取的链接中,但细节已更改(例如新页面标题),我想找到mongodb记录并进行更新。
    • 如果图片不存在,我想创建新记录

    我遇到问题的是删除尚未删除的条目。实现这一目标的最佳方法是什么?

    到目前为止,我的代码成功检查条目是否存在,更新它们。它正在删除与我遇到问题不再相关的记录。粘贴链接在这里:

    http://pastebin.com/35cXcXzk

2 个答案:

答案 0 :(得分:1)

您需要为项目添加时间戳(并在每次扫描时更新它们)并定期删除一段时间内未更新的项目,或者您需要将项目与特定查询相关联。在后一种情况下,您将收集以前与查询关联的所有项目,并在新结果进入时将其标记为关闭。最后未在列表中标记的任何项目都需要删除。

答案 1 :(得分:0)

另一种可能性是在mongodb 2.4中使用新的TTL索引选项,允许您设置文档上的生存时间

http://docs.mongodb.org/manual/tutorial/expire-data/

这会让服务器随着时间的推移而过期,而不必执行大量昂贵的删除执行。

另一个优化是使用2选项的强大功能来避免写入的内存高度碎片化,删除循环创建

http://docs.mongodb.org/manual/reference/command/collMod/