0

我需要一些关于我正在从事的项目的建议。

我目前正在处理一个请求标题的项目;下面是一个被抓取的标题的示例,采用 Mongo 文档样式:

{
    "url": "google.com",
    "statusCode": 301,
    "headers": {
        "location": "http://www.google.com/",
        "content-type": "text/html; charset=UTF-8",
        "date": "Mon, 25 Mar 2013 13:50:31 GMT",
        "expires": "Wed, 24 Apr 2013 13:50:31 GMT",
        "cache-control": "public, max-age=2592000",
        "server": "gws",
        "content-length": "219",
        "x-xss-protection": "1; mode=block",
        "x-frame-options": "SAMEORIGIN"
    }
}

该项目使用 Node.JS、Javascript 和 MongoDB。目前我有几千个这样的响应存储在 MongoDB 中,我有兴趣使用其中的一些itemsheaders检测平台变化。像server, x-powered-by,x-aspnet-version这样的标头在我看来都是未来可以用来交叉引用的标头。例如 - 如果一个网站“今天”从我在两个月内再次运行这个爬虫时升级Microsoft-IIS/7.0到,那么有理由相信这个网站有一个升级。Microsoft-IIS/7.5

我的问题是 - 最好的方法是什么?

我应该制作两个系列 -collectionTodaycollectionInTwoMonths

然后对每个 、 和 ? 的整数变化/增量进行正serverx-powered-by表达式x-aspnet-version搜索

这项工作的实施如何?

任何建议将不胜感激。

4

1 回答 1

1

有几种方法可以做到这一点。正如您所建议的那样,一种方法是为每个时间段创建不同的集合,并为每个时间段存储整个标题组。find然后,您可以通过为每个时间段运行 url、比较结果应用程序端并报告结果来查询差异。

另一种方法是存储一个“差异”集合,该集合针对每个时间点保存当时的标头与您上次查询的标头之间的差异。每次查询标头时,这将需要更多的应用程序逻辑,但在实际查询差异时工作量会减少。这就是我会做的。

编辑

如果这些是您需要的三个标题,那么我认为这听起来不错。请记住,当您查询以查找差异时,您需要找到每个标题更改以进行比较的最后时间,这意味着集合中的最后一个条目(时间)既对应于正确的 url 并且在问题。

用于差异的伪代码:

for every url you want:
    query collection by url, sorting by date 
    for each header:
        find the last document with that field
        if the header value in that document and the current header are different:
            add the field to the new document
    add the new document, holding the url, date, and all different fields, to the collection
于 2013-03-25T15:14:02.697 回答